Я купил Huawei Watch 2, потому что работаю над приложением, которое считывает шаги и частоту сердечных сокращений. Прежде чем выбрать Google Fitness API, я хотел попробовать получить доступ к необработанным данным непосредственно с датчиков часов.
Кажется, что датчик частоты пульса не работает, что бы я ни пытался. Я уже поместил "uses-permission android: name =" android.permission.BODY_SENSORS "" в свой файл AndroidManifest. Моя основная деятельность расширяет класс WearableActivity и реализует интерфейс SensorEventListener.
Это то, что у меня есть в методе onCreate () для датчиков:
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorSteps = mSensorManager.getDefaultSensor(TYPE_STEP_COUNTER);
mSensorHeart = mSensorManager.getDefaultSensor(TYPE_HEART_RATE);
String sensor_error = getResources().getString(R.string.error_no_sensor);
if (mSensorSteps == null) {
mTextSensorSteps.setText(sensor_error);
}
if (mSensorHeart == null) {
mTextSensorHeart.setText(sensor_error);
}
Существует строковый ресурс, который говорит «Нет датчика», если он не может обнаружить датчик, и датчики шага и пульса имеют свои собственные текстовые представления, mTextSensorSteps и mTextSensorHeart.
В методах onStart () и onStop () я зарегистрировал и отменил регистрацию слушателей для датчиков.
Вот что у меня есть в методе onSensorChanged () (метод onAccuracyChanged () пуст):
@Override
public void onSensorChanged(SensorEvent event) {
int sensorType = event.sensor.getType();
float currentValue = event.values[0];
switch (sensorType) {
case Sensor.TYPE_STEP_COUNTER:
// Event came from the steps sensor.
mTextSensorSteps.setText(getResources().getString(R.string.steps_label, currentValue));
break;
case Sensor.TYPE_HEART_RATE:
// Event came from the heart rate sensor.
mTextSensorHeart.setText(getResources().getString(R.string.heart_label, currentValue));
break;
default:
// do nothing
}}
Это мои строковые ресурсы:
<string name="error_no_sensor">No Sensor</string>
<string name="heart_label">Heart: %1$.2f</string>
<string name="steps_label">Steps: %1$.2f</string>
Код работает для всех датчиков, кроме датчика частоты сердечных сокращений. Если в часах нет датчика, я получаю сообщение об ошибке «Нет датчика». Если я попробую с гироскопом, все заработает. Если я попробую с акселерометром, все заработает. Когда я пишу TYPE_HEART_RATE, текстовое представление просто показывает «Сердце:% 1 $ .2f».
Я даже пробовал использовать числовые идентификаторы датчиков вместо имен, я знаю, что TYPE_STEP_COUNTER - 19, а TYPE_HEART_RATE - 21. Тот же результат: он работает с шагами, гироскопом (я думаю, что его ID 4 или что-то в этом роде), акселерометром, но не с датчиком сердечного ритма. Я даже попытался изменить случай Switch в методе onSensorChanged (), чтобы он работал следующим образом:
if (sensorType == 21) {
mTextSensorHeart.setText(getResources().getString(R.string.heart_label, currentValue));
}
Я снял корпус переключателя и просто использовал то же самое. Не работает только датчик пульса.
Я создал еще один проект для Android, который показывает список датчиков, которые есть в часах, и заметил, что датчик пульса - единственный, у которого нет "vendor =" Huawei SensorHub "". Вот что я нашел:
{sensor
name="ADPD153GGRI",
vendor="ANALOG DEVICES",
version=1,
type=21,
maxRange=255.0
...
}
в то время как все остальные датчики имеют в качестве производителя «Huawei SensorHub».
Я не могу найти модель датчика на сайте Analog Devices ( это самая близкая из найденных мной , но она не особо помогает), и отсюда я действительно не знаю, что еще делать. Может быть, поскольку это не оригинальный датчик huawei, массив значений [0] события датчика не работает?
Я действительно не знаю, что мне делать.
В API 23 датчик тела перешел на разрешение выполнения. Если вы зайдете в настройки, приложения и уведомления, информацию о приложении, выберите свое приложение, а затем разрешения. Вы должны увидеть, что разрешение датчика отключено. Вы можете включить его там для тестирования, но следует реализовать модель разрешений времени выполнения, описанную здесь. https://developer.android.com/training/articles/wear-permissions
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения