Как получить частоту сердечных сокращений каждые x секунд в Android Studio?

Я хочу получать данные с датчика сердечного ритма каждые x секунд. Я попробовал это с postDelayed(), но это работает только для чтения данных каждые x секунд, но датчик работает в это время, и батарея разряжается очень быстро. Я пытаюсь найти способ запустить датчик, получить данные и остановить датчик каждые x секунд.

Вот что я сделал до сих пор:

final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            checkHR = true;
            handler.postDelayed(this, 10000);
        }
    }, 1);

public void onSensorChanged(SensorEvent event) {
    if(checkHR == true){
        if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
            String msg = "" + (int)event.values[0];
            heartRate = (int)event.values[0];
            Log.d("Heart rate is:", msg);
            checkHR = false;
        }
    }

person Liviu Pinzaru    schedule 07.09.2020    source источник


Ответы (1)


Вы пытались unregisterListener после получения некоторых данных в onSensorChanged? и зарегистрируйтесь снова, когда postDelayed сработает. возможно, поэтому датчик все еще работает (все еще регистрирует датчик, даже когда checkHR=false) и разряжает батарею. Можете ли вы показать, как вы регистрируете этот слушатель? кардиомонитор не так распространен на устройствах Android...

с реализацией датчиков по умолчанию (SensorManager и SensorEventListener) это единственный возможный способ отключить датчик - на самом деле система обрабатывает датчики все время и передает данные только тогда, когда какое-либо приложение регистрирует прослушиватель. Таким образом, есть вероятность, что когда вы отмените регистрацию своего слушателя и ни одно другое приложение не зарегистрирует аналогичный слушатель, система по умолчанию отключит датчик, поскольку никто не запрашивает у него данные...

person snachmsm    schedule 07.09.2020
comment
Вот оно. Большое спасибо! - person Liviu Pinzaru; 17.09.2020