web-dev-qa-db-fra.com

Comment accéder au capteur de fréquence cardiaque dans Android Wearable?

J'ai des problèmes pour accéder à l'émetteur de fréquence cardiaque sur Moto 360. 

J'ai essayé les choses suivantes:

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

puis implémenter l'interface 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","--------------");

Et ce qui est étrange pour moi, je ne reçois aucun message (pas seulement la fréquence cardiaque).

J'ai aussi essayé de lister tous les capteurs et cela ne montre pas le capteur de fréquence cardiaque sur la liste. 

Bien sûr j'ai ajouté des persmissions 

 <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" />

Des idées ?

merci.

w.

11
wonglik

Comme @Kent et @Murphy l'ont suggéré, la solution consistait à mettre à jour le SDK. Dans mon cas, je devais abandonner le projet et créer un nouveau à partir de zéro, car même avec le SDK mis à jour, l'ancien ne fonctionnait pas. 

1
wonglik

J'ai commencé à travailler pour moi après avoir fait ce qui suit:

  1. Désinstaller mon application de la montre avec

    adb -s localhost:4444 uninstall com.example.Android.wearable.jumpingjack
    
  2. Ajout d'autorisations pour obtenir le capteur de fréquence cardiaque

    <uses-permission Android:name="Android.permission.BODY_SENSORS"/>
    
  3. Définir la version min et cible du SDK pour correspondre à la montre

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

A commencé l'application à nouveau. J'ai reçu le capteur de fréquence cardiaque avec Sensor.TYPE_HEART_RATE et j'ai commencé à recevoir ses lectures. Bien qu'ils étaient loin d'être bons. Il y avait beaucoup de lectures, mais elles étaient identiques, limitées à ces 5 valeurs:

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}

La plupart du temps, j'obtenais la même valeur de 53,0, ce qui ne semble pas être mon vrai rythme cardiaque. 77 aurait pu être celui.

6
Alexander K

J'ai eu un problème assez similaire sur le Moto 360. Le capteur a toujours renvoyé 0.0f comme une valeur.

Ensuite, j'ai attendu deux minutes et tout à coup, les valeurs! = 0 sont entrées. Il semble que ce capteur nécessite un "échauffement" avant de montrer quoi que ce soit. Pas vraiment étonnant si vous prenez en compte que cela mesure quelque chose qui se passe approximativement une fois par seconde avec l'unité "battements par minute". Il ne peut être fiable avant qu'une ou deux minutes se soient écoulées. Et chaque application a sa propre mesure: peu importe si une autre application Heartbeat est également en cours d'exécution (comme dans le cas de Moto Body).

Cela signifie également que vous devez créer un service pour écouter le capteur (et un classeur pour transmettre la valeur du capteur à votre activité ou à votre téléphone).

Consultez le projet de démonstration que j'ai partagé sur github: https://github.com/upost/MyHeartbeat

2
Uwe Post

Donc, je suis venu ici, avec le même problème et la solution simple est de supprimer l'application de la montre à l'aide de l'adb: 

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

Ensuite, réinstallez-le simplement avec Android Studio, Eclipse ou tout ce que vous avez utilisé à l'origine. 

Merci à Alexander K pour cette solution

0
mangledBadger