Возникли проблемы при чтении датчика сердечного ритма от 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"
/>
И теперь это работает!