SensorEventListener не работает.Как получить значение датчика? - PullRequest
0 голосов
/ 18 сентября 2018

Я тестирую датчик износа Android для будущих реализаций.Моя цель - получить значение частоты пульса и отобразить его в моей основной деятельности.Итак, я реализовал SensorHelper class:

import static android.content.Context.SENSOR_SERVICE;

public class SensorHelper implements SensorEventListener {

    private final SensorManager mSensorManager;
    private final Sensor mHeartRate;
    public String sensorValue = "deafult";

    public SensorHelper() {
        Log.i("SENSOR", "SENSOR CONSTRUCTOR");
        mSensorManager = (SensorManager) MyApplication.getAppContext().getSystemService(SENSOR_SERVICE);
        mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
            String msg = "" + (int)event.values[0];
            this.sensorValue = msg;
            Log.d("SENSOR", msg);
        }
        else
            this.sensorValue = "unable to read value";
            Log.d("SENSOR", "Unknown sensor type");
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
}

Насколько я знаю, функцию onSensorChanged следует вызывать каждый раз, когда частота сердечных сокращений меняется.В этой функции я обновляю переменную sensorValue.

В MainActivity.class я создал кнопку для обновления TextView, присвоив ей значение Sensorhelper.sensorValue:

public class MainActivity extends WearableActivity {

    private Button refreshButton;
    private TextView mTextView;
    SensorHelper sensorHelper;

    private View.OnClickListener refreshListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println("refresh");
            mTextView.setText(sensorHelper.sensorValue);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sensorHelper = new SensorHelper();

        mTextView = (TextView) findViewById(R.id.textView);
        refreshButton = (Button) findViewById(R.id.button_refresh);
        refreshButton.setOnClickListener(refreshListener);

        // Enables Always-on
        setAmbientEnabled();
    }
} 

Я добавил разрешение BODY_SENSORS.Проблема в том, что TextView всегда остается «по умолчанию», а кнопка не обновляет значение.Я думаю, что я что-то упустил из реализации SensorHelper.

Спасибо

1 Ответ

0 голосов
/ 04 октября 2018

Вам не хватает вызова, чтобы зарегистрировать слушателя для получения новых значений.

В вашем SensorHelper конструкторе добавьте mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_NORMAL);

public SensorHelper() {
    Log.i("SENSOR", "SENSOR CONSTRUCTOR");
    mSensorManager = (SensorManager) MyApplication.getAppContext().getSystemService(SENSOR_SERVICE);
    mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
    mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_NORMAL);
}

Не забудьте позвонить mSensorManager.unregisterListener(this);, когда вам больше не нужен датчик.

Проверьте SensorManager документацию для более подробной информации.

...