我买了一台华为手表2,因为我正在开发一款可以读取步数和心率的应用程序。在选择Google Fitness API之前,我想尝试直接从手表传感器访问原始数据。
不管我怎么试,心率感应器似乎都不工作。我已经在我的AndroidManifest文件中添加了"uses-permission android:name="android.permission.BODY_SENSORS"“”。我的主要活动扩展了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);
}有一个字符串资源,如果它不能检测到传感器,它会显示"No Sensor“,并且步速和心率传感器都有自己的文本视图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>该代码适用于除心率传感器以外的所有传感器。如果它是手表中不存在的传感器,我会收到"No Sensor“错误。如果我用陀螺仪试一下,它就能用了。如果我用加速度计试一下,它是有效的。当我编写TYPE_HEART_RATE时,文本视图只显示“心:%1$.2f”。
我甚至尝试使用传感器的编号I而不是名称,我知道TYPE_STEP_COUNTER是19,TYPE_HEART_RATE是21。同样的结果:它可以使用steps,陀螺仪(我想它的ID是4左右),加速计,但不能使用心率传感器。我甚至尝试修改onSensorChanged()方法中的切换用例,使其工作方式如下所示:
if (sensorType == 21) {
mTextSensorHeart.setText(getResources().getString(R.string.heart_label, currentValue));
}我去掉了开关盒,只用了一些if,一样的东西。心率传感器是唯一不能工作的。
我创建了另一个android项目,其中显示了手表中传感器的列表,我注意到心率传感器是唯一一个没有“vendor=”“华为SensorHub”的传感器。这是我发现的:
{sensor
name="ADPD153GGRI",
vendor="ANALOG DEVICES",
version=1,
type=21,
maxRange=255.0
...
}而所有其他传感器的供应商都是"Huawei SensorHub“。
我在and的网站上找不到传感器型号(this is the closest one I found,但它没有真正的帮助),从这里我真的不知道还能做什么。也许因为它是非原装的华为传感器,所以传感器事件的值数组不起作用?
我真的不知道该怎么办。
发布于 2020-01-14 07:18:59
在API 23中,身体传感器移动到运行时权限。如果您进入设置、应用程序和通知、应用程序信息,请选择您的应用程序,然后选择权限。您应该会看到传感器权限已禁用。您可以在那里启用它以进行测试,但应该实现这里概述的运行时权限模型。https://developer.android.com/training/articles/wear-permissions
https://stackoverflow.com/questions/59453056
复制相似问题