当前位置: 首页 > 知识库问答 >
问题:

我的华为Watch 2的心率传感器如果不是华为原装传感器怎么访问呢?

冷越泽
2023-03-14

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

不管我怎么试,心率感应器似乎都不起作用。我已经将“uses-permissionandroid:name=”android.permission.body_sensors“”放在了我的AndroidManifest文件中。我的主要activity扩展了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”,并且step和heart rate传感器都有自己的textviews,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>

该代码适用于除心率传感器外的每一个传感器。如果它是一个传感器不存在在手表,我得到一个“没有传感器”错误。如果我用陀螺仪试试看就行了。如果我用加速度计试试它就行了。当我写TYPE_HEART_RATE时,textview只显示“心脏:%1$.2f”。

我甚至尝试使用传感器的编号ID而不是名称,我知道TYPE_STEP_COUNTER是19,TYPE_HEART_RATE是21。同样的结果:它与步进、陀螺仪(我认为它的ID是4或类似的东西)、加速度计一起工作,但与心率传感器并非如此。我甚至尝试修改onSensorChanged()方法中的开关用例,使其工作如下:

if (sensorType == 21) {
        mTextSensorHeart.setText(getResources().getString(R.string.heart_label, currentValue));
    }

我拿掉了开关盒,用了几个IF,一样的东西。心率传感器是唯一不工作的。

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

{sensor
name="ADPD153GGRI",
vendor="ANALOG DEVICES",
version=1,
type=21,
maxRange=255.0
...
}

而其他所有传感器都有“华为SensorHub”作为供应商。

我在ADI公司的网站上找不到传感器模型(这是我找到的最接近的一个,但它并没有真正的帮助),从这里我真的不知道还能做什么。也许因为它是一个非华为原创传感器,传感器事件的value[0]数组不工作了?

我真的不知道该怎么办。

共有1个答案

融烨磊
2023-03-14

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

 类似资料:
  • 佩戴舒适的心率传感器与 A300,从您的每日运动中获得最大益处。您可以在 A300 中实时准确查看您的心率。查看您的训练的主要作用,并关注您希望实现的目标——燃烧脂肪或提高健康水平。或根据您在 Flow 网络服务上规划的训练指导找到心率区。心率传感器在您游泳时也可检测您的心率。 虽然训练时存在许多暗示身体状况的主观迹象(主观体力感觉、呼吸频率和身体感觉),但都不如测量心率可靠。它是内在和外在因素影

  • 是否可以在Android Wear中记录来自心率传感器的原始光线数据?我知道以bpm记录计算的心率是可能的,但我想记录原始的光数据。 我正在使用的设备是Polar M600。 这个问题以前已经问过了,但我现在再问一遍,以防此后有任何新的设备或API使访问这些数据成为可能:

  • 问题内容: 我正在尝试使用MainActivity.java上的以下代码访问LG Watch Urbane的心率传感器: 问题是我收到此错误: 发生该错误是因为没有与TYPE_HEART_RATE相关联的传感器。因此,我编写了一些代码以使用.getSensorList(Sensor.TYPE_ALL)方法获取传感器的完整列表,我得到了以下信息: 我在那里没有看到任何心率传感器,所以我不知道为了从中

  • 您可使用 A370 作为心率传感器与另一个可接收心率传感器配置文件的蓝牙设备,如码表、运动应用程式如 Polar Beat 或其他腕式穿戴设备。要使用它,首先您需要将 A370 与接收设备配对,就像其他蓝牙配件一样。请参阅接收设备用户指南中的配对说明。 要打开心率传感器模式: 进入主菜单中的设置。 轻击 ,接受确认请求以打开心率传感器模式 要关闭心率传感器模式,请按返回按钮并确认您的选择。 请注意

  • 在Samsung的编程指南(第77-81页)中有关于如何使用S Health Service SDK设置和获取心率信息的参考。不过,我想直接访问Galaxy S5的心率传感器,就像访问加速度计、陀螺仪、光传感器等传感器一样。我为三星gear live找到了这个例子,但我找不到任何Galaxy S5的例子。 是否可以直接访问Galaxy S5的心率传感器?有没有人有一个如何做的代码示例? 谢谢你。

  • 我有一个Android应用程序,可以从Polar H10设备上获取心率测量值。我完全不知道如何解释心率。蓝牙的各种链接。不幸的是,com站点导致了404个错误。 特征值为[16、59、83、4] 据我所知,第二个字节(59)是BPM中的心率。但这似乎不是十进制的,因为值先升到127,然后再升到-127,-126,-125。。。它也不是十六进制。 我试过(在科特林) 一旦-127出现,所有值都会崩溃