我在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" />
有什么想法吗?
感谢。
瓦特
答案 0 :(得分:6)
在我做完以下事情后开始为我工作:
使用
从手表中卸载了我的应用adb -s localhost:4444 uninstall com.example.android.wearable.jumpingjack
添加了获取心率传感器的权限
<uses-permission android:name="android.permission.BODY_SENSORS"/>
设置min和目标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可能是那个。
答案 1 :(得分:2)
我在Moto 360上遇到了类似的问题。传感器总是返回0.0f值。
然后我等了两分钟,然后突然重视!= 0进来了。看来这个传感器在显示任何东西之前需要“热身”。如果你考虑到它大约每秒钟发生一次“单位每分钟节拍”的事情,那就不是很惊人了。在一两分钟过后,它就不可靠了。每个应用程序都有自己的测量:如果另一个心跳应用程序也在运行(如Moto Body的话)并不重要。
这也意味着您必须创建一项服务来收听传感器(以及一个活页夹,将传感器的价值传递给您的活动或手机)。
看看我在github上分享的演示项目: https://github.com/upost/MyHeartbeat
答案 2 :(得分:1)
正如@Kent和@Murphy建议的那样,更新的SDK就是解决方案。在我的情况下,我需要放弃项目并从头开始创建新的,即使使用更新的SDK旧版本也无效。
答案 3 :(得分:0)
所以,我来到这里,遇到同样的问题,简单的解决方案是使用adb从手表中删除应用程序:
adb -s localhost:4444 uninstall com.*packagename*
然后只需使用android studio,eclipse或者你原来使用的任何东西重新安装它。
感谢Alexander K提供此解决方案