Возникли проблемы при чтении датчика сердечного ритма от Moto 360 - Android Wear

Кто-нибудь успешно считывал датчик сердечного ритма от Moto 360?

mSensorManager = ((SensorManager)getSystemService(SENSOR_SERVICE));
mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);

Я получаю сообщение об ошибке, в котором говорится, что "SensorManager﹕" Датчик или слушатель пуст "

Я знаю, что Gear Live использует другой идентификатор, отличный от Sensor.TYPE_HEART_RATE... Интересно, так ли это с Moto 360?

Я пробовал значение датчика 65538, которое сообщает о себе как "Wellness Sensor", но оно также не возвращает данные.

Любой совет будет принят во внимание.

6 ответов

Я делаю то же самое на моем Moto 360, и я получаю датчик и частоту сердечных сокращений. Вы положили разрешение на данные тела:

использование-разрешение android:name="android.permission.BODY_SENSORS"

в вашем Manifest.xml?

Sensor.TYPE_HEART_RATE на самом деле правильный идентификатор. У меня была та же проблема: датчик был нулевым, хотя у меня было разрешение BODY_SENSORS в манифесте. Я исправил это, удалив приложение, перезапустив часы и запросив разрешение BODY_SENSORS во время выполнения (см. https://developer.android.com/training/articles/wear-permissions.html). После этого я получил системный диалог для разрешения датчика тела, и затем я начал получать обновления от датчика. Надеюсь, это поможет.

Наряду с тем, что в вашем манифесте установлены разрешения для BODY_SENSORS, убедитесь, что после установки приложения эти разрешения включены:

https://support.google.com/androidwear/answer/6321353?hl=en

Этот получил меня на некоторое время...

У меня была такая же проблема при попытке опроса пульса от Мото 360, датчик был нулевым. Сделали так же, как вы, чтобы выяснить, что доступным датчиком был датчик здоровья:

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);

if (sensor == null) {
  List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
  for (Sensor sensor1 : sensors) {
    Log.i(TAG, sensor1.getName() + ": " + availableSensor.getType());
  }
}

65538, похоже, был правильный тип для использования, поэтому я использовал это.

Wellness Passive Sensor 65538

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

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

С Android M вы должны убедиться, что пользователь включает разрешение при первом запуске приложения ИЛИ переходя вручную к разрешению приложения и включив его.

У меня была такая же проблема с Moto360 и ее, как я решил ее.

Я перепробовал все перечисленные решения - переустанавливал приложение, обновлял SDK, но он мне не помог. Я включил разрешения для датчиков тела в файле манифеста. Я не мог видеть датчик сердечного ритма в моем списке доступных датчиков. Поэтому я считаю, что это была проблема с разрешениями. API 23 и выше Android использует новую модель разрешений.

По этой ссылке: https://developer.android.com/training/articles/wear-permissions.html Здесь написано: "Примечание. Чтобы приложение могло использовать новую модель разрешений, оно должно указать значение 23 для обоих применений". sdk-element и compileSdkVersion."

Я изменил свои сценарии Gradel для использования как minsdk, так и compliledsdk как 23. Также добавлено следующее в манифест моего приложения.

<uses-sdk android:minSdkVersion="23"
            android:targetSdkVersion="23"
             /> 

И теперь это работает!

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