【问题标题】:How to read Heart rate from Android Wear如何从 Android Wear 读取心率
【发布时间】:2016-08-14 02:36:02
【问题描述】:

我需要读取用户在那一刻的心率。我尝试在 Wear 项目的主要活动中使用此代码。

公共类 MainActivity 扩展 WearableActivity 实现 SensorEventListener { 私有静态最终字符串 TAG = "MainActivity"; 私有TextView mTextViewHeart; 传感器管理器 mSensorManager; 传感器 mHeartRateSensor; 传感器事件监听器传感器事件监听器; @覆盖 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextViewHeart = (TextView) findViewById(R.id.heart); mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE)); mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL); Log.i(TAG, "监听器已注册。"); mTextViewHeart.setText("这里有东西"); mSensorManager.registerListener(sensorEventListener, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST); } 公共无效 onResume(){ 超级.onResume(); } 公共无效onAccuracyChanged(传感器传感器,int精度){ Log.d(TAG, "onAccuracyChanged - 准确度:" + 准确度); } 公共无效 onSensorChanged(SensorEvent 事件){ if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) { 字符串 msg = "" + (int)event.values[0]; mTextViewHeart.setText(msg); 日志.d(标签,味精); } 别的 Log.d(TAG, "未知传感器类型"); } }

这段代码根本不起作用,给我一个错误提示:

E/SensorManager﹕传感器或侦听器为空

如果我使用除心率传感器之外的其他任何东西,它也可以正常工作。

我正在使用:

  • 具有 android API 级别 23 的 LG G4
  • 具有 Wear API 级别 23 的 LG Urbane 手表(我知道它有一个心率传感器)

感谢您的帮助。

【问题讨论】:

标签: java android


【解决方案1】:

我遇到了与您在this question 中看到的相同的问题。我们有相同的穿戴设备,所以我几乎可以肯定你在穿戴 AndroidManifest.xml 上错过了这个

<uses-permission android:name="android.permission.BODY_SENSORS" />

另外,您应该转到设置中的权限以检查该权限是否已启用。

您可以在GitHub 上查看我的项目,该项目目前正在运行。

【讨论】:

  • 您好!实际上,我确实在我的 Wear 清单中获得了许可,但它不起作用……我会检查你的项目。谢谢!
  • 你知道如何从 adb 向 Sensor 传递数据
  • @prathamkesarkar 你好!这么晚才回复很抱歉。我没试过,所以我帮不了你。
【解决方案2】:

实际上,您正在实现 SensorEventListener 接口并创建了一个 SensorEventListener 的实例,而没有对其进行初始化。

要么初始化传感器:

SensorEventListener sensorEventListener = new SensorEventListener(){ ... };

或删除它并使用“this”:

mSensorManager.registerListener(sensorEventListener, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);

改成:

mSensorManager.registerListener(this, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);

【讨论】:

  • 其他智能手表的解决方案相同:华为、索尼和华硕。仅使用 mSensorManager.registerListener(this, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST);
【解决方案3】:

别忘了,从 SDK 23 开始,您必须分别在可穿戴设备和手机上请求权限。 Wear 应用不再继承手机应用的权限。

https://developer.android.com/training/articles/wear-permissions.html

【讨论】:

    【解决方案4】:

    权限问题已经让我好几次了。虽然我还没有实现代码来请求使用传感器的权限,但一个简单的解决方法是进入可穿戴设备的设置,然后选择权限并找到您的应用程序。当您单击您的应用程序时,您会注意到传感器已禁用,因此只需单击它即可启用它们。那么应该可以工作了!

    【讨论】:

    • 天啊!我真的花了两个小时来反对这个。我不是 Java 开发人员,所以我认为我做错了什么。不,该应用程序只需要设置权限。我确实在 AndroidManifest.xml 中添加了权限,并认为这就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多