Как читать ЧСС из 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
Дело в разрешениях застало меня несколько раз. Хотя я еще не реализовал код для запроса разрешения на использование датчиков, простой обходной путь состоит в том, чтобы перейти к настройкам на носимом устройстве, затем выбрать разрешения и найти свое приложение. Когда вы нажмете на свое приложение, вы заметите, что датчики отключены, поэтому просто нажмите на них, чтобы включить их. Должен работать тогда!