Как читать ЧСС из Android Wear

Мне нужно прочитать частоту сердечных сокращений пользователя в этот момент. Я попытался использовать этот код, расположенный в моей основной деятельности в проекте Wear.

Открытый класс MainActivity расширяет WearableActivity, реализует SensorEventListener {

    private static final String TAG = "MainActivity";
    частный TextView mTextViewHeart;
    SensorManager mSensorManager;
    Датчик mHeartRateSensor;
    SensorEventListener sensorEventListener;

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

        mTextViewHeart = (TextView) findViewById(R.id.heart);
        mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));
        mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
        mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);
        Log.i(TAG, "LISTENER ЗАРЕГИСТРИРОВАННЫЙ.");
        mTextViewHeart.setText("Что-то здесь");


        mSensorManager.registerListener(sensorEventListener, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);
    }


    public void onResume(){
        super.onResume();
    }

    public void onAccuracyChanged(Датчик, внутренняя точность) {
        Log.d(TAG, "onAccuracyChanged - точность: " + точность);
    }

    public void onSensorChanged(событие SensorEvent) {
        if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
            String msg = "" + (int)event.values ​​[0];
            mTextViewHeart.setText(MSG);
            Log.d(TAG, MSG);
        }
        еще
            Log.d (TAG, "Неизвестный тип датчика");
    }

}

Этот код просто не работает, из-за чего появляется ошибка:

E / SensorManager ﹕ датчик или слушатель нулевой

Это работает нормально, если я использую что-нибудь еще, кроме датчика сердечного ритма.

Я использую:

  • LG G4 с уровнем Android API 23
  • Часы LG Urbane (которые, как я знаю, имеют датчик сердечного ритма) с уровнем API Wear 23

Спасибо за помощь.

4 ответа

Решение

Я столкнулся с той же проблемой, что и в этом вопросе. У нас одинаковые износостойкие устройства, поэтому я почти уверен, что вы пропустили это на своем AndroidManifest.xml:

<uses-permission android:name="android.permission.BODY_SENSORS" />

Кроме того, вы должны перейти к разрешениям в настройках, чтобы проверить, включено ли это разрешение.

Вы можете проверить мой проект на GitHub, который сейчас работает.

На самом деле вы реализуете интерфейс SensorEventListener и создали экземпляр SensorEventListener без его инициализации.

Либо инициализируйте датчик:

SensorEventListener sensorEventListener = new SensorEventListener(){ ... };

или удалите его и используйте "this":

mSensorManager.registerListener(sensorEventListener, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);

измените это на:

mSensorManager.registerListener(this, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);

Не забывайте, что начиная с SDK 23 вы должны отдельно запрашивать разрешения для устройства для ношения и телефона. Приложение Wear больше не наследует разрешения от приложения телефона.

https://developer.android.com/training/articles/wear-permissions.html

Дело в разрешениях застало меня несколько раз. Хотя я еще не реализовал код для запроса разрешения на использование датчиков, простой обходной путь состоит в том, чтобы перейти к настройкам на носимом устройстве, затем выбрать разрешения и найти свое приложение. Когда вы нажмете на свое приложение, вы заметите, что датчики отключены, поэтому просто нажмите на них, чтобы включить их. Должен работать тогда!

Другие вопросы по тегам