首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我的Huawei Watch 2不是原装的Huawei传感器,我如何访问它?

如果我的Huawei Watch 2不是原装的Huawei传感器,我如何访问它?
EN

Stack Overflow用户
提问于 2019-12-23 17:41:14
回答 1查看 610关注 0票数 1

我买了一台华为手表2,因为我正在开发一款可以读取步数和心率的应用程序。在选择Google Fitness API之前,我想尝试直接从手表传感器访问原始数据。

不管我怎么试,心率感应器似乎都不工作。我已经在我的AndroidManifest文件中添加了"uses-permission android:name="android.permission.BODY_SENSORS"“”。我的主要活动扩展了WearableActivity类并实现了SensorEventListener接口。

这是我在onCreate()方法中关于传感器的内容:

代码语言:javascript
复制
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()方法为空)中的内容:

代码语言:javascript
复制
@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
    }}

以下是我的字符串资源:

代码语言:javascript
复制
<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()方法中的切换用例,使其工作方式如下所示:

代码语言:javascript
复制
if (sensorType == 21) {
        mTextSensorHeart.setText(getResources().getString(R.string.heart_label, currentValue));
    }

我去掉了开关盒,只用了一些if,一样的东西。心率传感器是唯一不能工作的。

我创建了另一个android项目,其中显示了手表中传感器的列表,我注意到心率传感器是唯一一个没有“vendor=”“华为SensorHub”的传感器。这是我发现的:

代码语言:javascript
复制
{sensor
name="ADPD153GGRI",
vendor="ANALOG DEVICES",
version=1,
type=21,
maxRange=255.0
...
}

而所有其他传感器的供应商都是"Huawei SensorHub“。

我在and的网站上找不到传感器型号(this is the closest one I found,但它没有真正的帮助),从这里我真的不知道还能做什么。也许因为它是非原装的华为传感器,所以传感器事件的值数组不起作用?

我真的不知道该怎么办。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-14 07:18:59

在API 23中,身体传感器移动到运行时权限。如果您进入设置、应用程序和通知、应用程序信息,请选择您的应用程序,然后选择权限。您应该会看到传感器权限已禁用。您可以在那里启用它以进行测试,但应该实现这里概述的运行时权限模型。https://developer.android.com/training/articles/wear-permissions

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59453056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档