2014-09-13 10 views
5

Qualcuno ha letto con successo il sensore di frequenza cardiaca dal Moto 360?Problemi con la lettura del sensore di frequenza cardiaca da Moto 360 - Android Wear

mSensorManager = ((SensorManager)getSystemService(SENSOR_SERVICE)); 
mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); 

sto ottenendo un errore che indica "SensorManager: sensore o ascoltatore è nullo"

So che il Gear Live utilizza un ID diverso diverso Sensor.TYPE_HEART_RATE ... Mi chiedo se questo è il caso con il Moto 360.

Ho provato un valore del sensore di 65538 che si presenta come un "sensore di benessere" ma che non sembra restituire i dati.

Qualsiasi consiglio sarebbe apprezzato.

+0

avete risolto questo problema forse? – EyesClear

+0

L'API dei sensori, dalle mie esperienze con esso, sembra incredibilmente instabile. Spero di fare qualcosa di sbagliato e non è così, ma sembra esserci una netta mancanza di persone che hanno avuto successo su questo fronte –

+0

Vedi anche la mia risposta su una discussione diversa http://stackoverflow.com/a/ 30947209/2029699 –

risposta

1

Sto facendo lo stesso sul mio Moto 360 e ottengo il sensore e la frequenza cardiaca. Hai messo il permesso per i dati del corpo:

usa-permesso android: name = "android.permission.BODY_SENSORS"

nella tua Manifest.xml?

+0

Inserisco il permesso di utilizzo in AndroidManifest.xml, ma non riesco a ottenere la frequenza cardiaca. SensorManager.getSensorList non restituisce Sensor.TYPE_HEART_RATE. – kazhik

+1

Ho aggiornato l'SDK e funziona! – kazhik

+0

@kazhik Ho il nuovissimo SDK e non funziona per me. Non vedo il sensore della frequenza cardiaca nella lista. Potresti aiutarmi? – EyesClear

1

Avevo lo stesso problema durante il tentativo di eseguire il polling della frequenza cardiaca da un Moto 360, il sensore era nullo. Ha fatto lo stesso a lavorare fuori che il sensore disponibile era il sensore di benessere:

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); 

if (sensor == null) { 
    List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); 
    for (Sensor sensor1 : sensors) { 
    Log.i(TAG, sensor1.getName() + ": " + availableSensor.getType()); 
    } 
} 

65538 sembrava essere il tipo corretto da utilizzare, quindi ho usato questo.

Wellness Passive Sensor 65538 

A Reddit thread I found suggerito questa era la strada giusta da percorrere. Mi sembrava di ottenere letture da esso, ma non erano affidabili.

Con un po 'più di ricerca, ho scoperto an open source project che esegue il polling dei dati del sensore e lo visualizza. Questo sembra funzionare solo a volte, quindi considero le API dei sensori non affidabili e ho temporaneamente parcheggiato il mio progetto. Lo rivisiterò di nuovo tra un paio di mesi e aggiornerò la mia risposta se ritengo che le API dei sensori siano più affidabili.

1

Sensor.TYPE_HEART_RATE è in realtà l'ID corretto. Ho avuto lo stesso problema: il sensore era nullo anche se avevo il permesso BODY_SENSORS nel manifest. L'ho risolto rimuovendo l'app, riavviando l'orologio e richiedendo l'autorizzazione BODY_SENSORS in fase di runtime (vedere https://developer.android.com/training/articles/wear-permissions.html). Successivamente ho ottenuto il dialogo di sistema per l'autorizzazione del sensore del corpo e ho quindi iniziato a ricevere gli aggiornamenti dal sensore. Spero che questo aiuti.

+0

Funziona! Salvavita! – developeralways

0

Ho avuto lo stesso problema con Moto360 e il suo come l'ho risolto.

Ho provato tutte le soluzioni elencate - ri installando l'app, aggiornando l'SDK ma funziona per me. Ho incluso le autorizzazioni per i sensori del corpo nel file Manifest. Non riuscivo a vedere il sensore di frequenza cardiaca nella mia lista di sensori disponibili. Quindi credo che fosse un problema di permessi. L'API 23 in poi Android utilizza un nuovo modello di autorizzazioni.

Da questo link: https://developer.android.com/training/articles/wear-permissions.html Dice - "Nota: Per un app per utilizzare il nuovo modello di autorizzazioni, è necessario specificare un valore del 23 per entrambi gli usi-sdk-elemento ed compileSdkVersion."

Ho modificato i miei script gradel per utilizzare sia minsdk che compliledsdk come 23. Inoltre è stato aggiunto alla mia app più manifiest.

<uses-sdk android:minSdkVersion="23" 
      android:targetSdkVersion="23" 
      /> 

e ora il suo lavoro !!

Problemi correlati