Android wear开发如何获取心率(HRM)呢?最近项目需要,自己研究了一下。国内关于Wear开发的资源太有限,在外网扒了扒,整理出来的!
首先,
我依旧是用的eclipse开发的,搭建了个android wear开发环境。
使用Samsung Gear Line做的测试。
实现方法:
1.First, declare this permission in your manifest: 首先,在你的manifest中声明权限:
2.then get an instance of SensorManager and an instance of the Sensor that we want to use, the HR sensor in this case.然后获取 SensorManager 的对象,实例化你所需要使用的Seneor对象,在这个案例中是HR Sensor(心率传感器).
mSensorManager = ((SensorManager)getSystemService(SENSOR_SERVICE));
mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
mHeartRateSensor = mSensorManager.getDefaultSensor(65562);
Using Sensor.TYPE_HEART_RATE (使用Sensor.TYPE_HEART_RATE运行起来获取到的参数,确实误差很大,精确度也太低)。
Using 65562 as Sensor Type (将65562作为传感器类型获取到的参数,精准度为Accuracy=3)
5.After that, you can now register a listener for sensor data by calling: 然后,你需要为Sensor注册事件用于回调数据。
protected void onStart() {
super.onStart();
mSensorManager.registerListener(this, this.mHeartRateSensor, 3);
}
6.
In this case, we let our activity be the listener for sensor data so we must implement SensorEventListener and override these two methods:既然这样,我们需要实现SensorEventListener接口,复写下面这两个函数,让我们Activity监听传感器的数据。
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
Log.d(TAG, "sensor event: " + sensorEvent.accuracy + " = " + sensorEvent.values[0]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
Log.d(TAG, "accuracy changed: " + i);
}
7.
Lastly, we need to make sure that we unregister our listener when we exit our application.最后就是我们需要确保我们退出应用时取消注册。
@Override
protected void onStop() {
super.onStop();
mSensorManager.unregisterListener(this);
}
在这里我也说一下我遇到的奇葩问题,因为我使用的是Samsung Gear Line 做的测试,不知道其他的智能手表会不会遇到这类问题。
1.在遍历SensorList的时候该智能手表不存在Heart Rate Seneor。
List sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for (Sensor sensor : sensors) {
Log.e(TAG,
"遍历sensor:[name=" + sensor.getName() + ";type="
+ sensor.getType() + ";vendor="
+ sensor.getVendor() + "]");
}
这就意味了如果你获取Snesor.TYPE_HEART_RATE 获取65562时,获取不到。就会导致下面的错误。
2,获取HRM的Sensor对象时,报错指针。 mHrSensor =null;
mHrSensor = mSensorManager.getDefaultSensor(65562);
···················
后来,我重新设置了一下智能手表中的一些设置,然后智能手表丢一边下班了。周一来上班时,手表没电关机了,于是充了电点开机,打开app,发现后面的紫外线灯亮起来了,app上也有数据了。
Demo (代码)下载:http://download.csdn.net/detail/kern_/9501665
相关资料:http://developer.samsung.com/search/searchList.do?searchTop=HEART+RATE