Как получить доступ к датчику сердечного ритма в Android Wearable?
У меня проблемы с доступом к датчику сердечного ритма на Moto 360.
Я пробовал следующие вещи:
Sensor mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);
а затем реализовать интерфейс SensorEventListener:
@Override
public void onSensorChanged(SensorEvent event) {
String TAG = "tag";
Log.i(TAG, "--------------------------");
Log.i(TAG, msg);
Log.i(TAG, ""+ event.sensor.getType());
Log.i("live","--------------");
И что странно для меня, я не получаю никаких сообщений вообще (не только сердечный ритм).
Также я попытался перечислить все датчики, и он не показывает датчик сердечного ритма в списке.
Конечно, я добавил разрешения
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.watchtest" >
<uses-feature android:name="android.hardware.type.watch" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
Есть идеи?
Благодарю.
ш.
4 ответа
Как предложили @Kent и @Murphy, обновленный SDK был решением. В моем случае мне нужно было отказаться от проекта и создать новый с нуля, так как даже с обновленным SDK старый не работал.
Начал работать на меня после того, как я сделал следующее:
Удалил мое приложение из часов с
adb -s localhost:4444 uninstall com.example.android.wearable.jumpingjack
Добавлены разрешения на получение датчика сердечного ритма
<uses-permission android:name="android.permission.BODY_SENSORS"/>
Установите минимальную и целевую версии SDK, чтобы они соответствовали часам
android:minSdkVersion="20" android:targetSdkVersion="20"
Запустил приложение снова. Я получил датчик ЧСС с Sensor.TYPE_HEART_RATE и начал получать его показания. Хотя они были далеко не хорошими. Было много чтений, но они были точно такими же, ограничиваясь этими 5 значениями:
heartRate onSensorChanged values = [0.0], accuracy = 0, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [53.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [54.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [55.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [77.0], accuracy = 1, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
Большую часть времени я получал то же значение 53,0, которое не соответствует моему реальному сердечному ритму. 77 мог быть один.
У меня была довольно похожая проблема на Moto 360. Датчик всегда возвращал 0.0f в качестве значения.
Затем я подождал две минуты, и внезапно вошли значения!=0. Кажется, этот датчик нуждается в "прогреве", прежде чем что-либо показывать. Не очень удивительно, если принять во внимание, что он измеряет что-то, происходящее примерно раз в секунду с единицей "ударов в минуту". Он не может быть надежным до того, как пройдет одна или две минуты. И у каждого приложения есть свои измерения: не имеет значения, запущено ли еще одно приложение сердцебиения (например, в Moto Body).
Это также означает, что вы должны создать службу для прослушивания датчика (и связующую, чтобы передать значение датчика вашей активности или вашему телефону).
Взгляните на демонстрационный проект, которым я поделился на github: https://github.com/upost/MyHeartbeat
Итак, я пришел сюда с той же проблемой, и простое решение - удалить приложение из часов с помощью adb:
adb -s localhost:4444 uninstall com.*packagename*
Затем просто переустановите его, используя Android Studio, Eclipse или то, что вы использовали изначально.
Спасибо Александру К за это решение