web-dev-qa-db-ja.com

Androidウェアラブルで心拍センサーにアクセスする方法は?

Moto 360の心拍数センサーへのアクセスに問題があります。

私は次のことを試しました:

Sensor mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);

次に、SensorEventListenerインターフェイスを実装します。

@Override
public void onSensorChanged(SensorEvent event) {

        String TAG = "tag";
        Log.i(TAG, "--------------------------");
        Log.i(TAG, msg);
        Log.i(TAG, ""+ event.sensor.getType());
        Log.i("live","--------------");

そして、私にとって奇妙なのは、メッセージがまったく届かないことです(心拍数だけではありません)。

また、すべてのセンサーを一覧表示してみましたが、リストに心拍数センサーが表示されません。

もちろん、許可を追加しました

 <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.watchtest" >

<uses-feature Android:name="Android.hardware.type.watch" />
<uses-permission Android:name="Android.permission.BODY_SENSORS" />

何か案は ?

ありがとう。

w。

11
wonglik

@Kentと@Murphyが示唆したように、更新されたSDKがソリューションでした。私の場合、更新されたSDKでも古いプロジェクトが機能しなかったので、プロジェクトを削除して新しいものを最初から作成する必要がありました。

1
wonglik

私が次のことをした後、私のために働き始めました:

  1. 時計からアプリをアンインストールした

    adb -s localhost:4444 uninstall com.example.Android.wearable.jumpingjack
    
  2. 心拍数センサーを取得する権限を追加しました

    <uses-permission Android:name="Android.permission.BODY_SENSORS"/>
    
  3. 時計と一致するように最小およびターゲットSDKバージョンを設定する

    Android:minSdkVersion="20" Android:targetSdkVersion="20"
    

アプリを再開しました。 Sensor.TYPE_HEART_RATEで心拍数センサーを受け取り、その読み取り値を受け取り始めました。彼らは良いとはほど遠かったが。多くの測定値がありましたが、それらはまったく同じで、次の5つの値に制限されています。

heartRate onSensorChanged values = [0.0], accuracy = 0, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [53.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [54.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [55.0], accuracy = 2, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}
heartRate onSensorChanged values = [77.0], accuracy = 1, sensor = {Sensor name="Heart Rate Sensor", vendor="Motorola", version=1, type=21, maxRange=65535.0, resolution=1.0, power=0.45, minDelay=0}

ほとんどの場合、私の本当の心拍数ではないように見える同じ53.0の値を取得していました。 77人だったかもしれない。

6
Alexander K

Moto 360でも同様の問題がありました。センサーは常に0.0fを値として返しました。

それから2分間待って、突然値!= 0が入りました。何も表示する前に、このセンサーに「ウォームアップ」が必要なようです。 「1分あたりのビート数」という単位でおおよそ1秒に1回発生していることが測定されることを考慮に入れても、それほど驚くことではありません。 1〜2分が経過するまでは信頼できません。また、各アプリには独自の測定値があります。別のハートビートアプリも実行されているかどうかは関係ありません(Moto Bodyなど)。

これはまた、センサー(およびセンサーの値をアクティビティまたは電話に渡すためのバインダー)をリッスンするサービスを作成する必要があることも意味します。

私がgithubで共有したデモプロジェクトを見てください: https://github.com/upost/MyHeartbeat

2
Uwe Post

そこで、私はここに来ましたが、同じ問題があり、単純な解決策は、adbを使用して時計からアプリケーションを削除することです。

adb -s localhost:4444 uninstall com.*packagename*

次に、Android studio、Eclipse、または最初に使用したものを使用して、再インストールします。

このソリューションを提供してくれたAlexander Kに感謝

0
mangledBadger