Mit der Sensors API können Sie Sensorrohdaten in Ihrer App in Echtzeit lesen. Verwenden Sie diese API, um Folgendes zu tun:
- Hier kannst du die Datenquellen auflisten, die auf dem Gerät und auf Begleitgeräten verfügbar sind.
- Registrieren Sie Listener für den Empfang von Sensorrohdaten.
- Registrierung von Listenern aufheben, sodass sie keine Sensorrohdaten mehr erhalten
Verfügbare Datenquellen auflisten
So rufen Sie eine Liste aller verfügbaren Datenquellen auf dem Gerät und im Companion auf:
verwenden Sie die
SensorsClient.findDataSources
:
Kotlin
private val fitnessOptions = FitnessOptions.builder().addDataType(DataType.TYPE_STEP_COUNT_DELTA).build() // Note: Fitness.SensorsApi.findDataSources() requires the // ACCESS_FINE_LOCATION permission. Fitness.getSensorsClient(requireContext(), GoogleSignIn.getAccountForExtension(requireContext(), fitnessOptions)) .findDataSources( DataSourcesRequest.Builder() .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA) .setDataSourceTypes(DataSource.TYPE_RAW) .build()) .addOnSuccessListener { dataSources -> dataSources.forEach { Log.i(TAG, "Data source found: ${it.streamIdentifier}") Log.i(TAG, "Data Source type: ${it.dataType.name}") if (it.dataType == DataType.TYPE_STEP_COUNT_DELTA) { Log.i(TAG, "Data source for STEP_COUNT_DELTA found!") ... } } } .addOnFailureListener { e -> Log.e(TAG, "Find data sources request failed", e) }
Java
FitnessOptions fitnessOptions = FitnessOptions.builder().addDataType(DataType.TYPE_STEP_COUNT_DELTA).build(); // Note: Fitness.SensorsApi.findDataSources() requires the // ACCESS_FINE_LOCATION permission. Fitness.getSensorsClient(getApplicationContext(), GoogleSignIn.getAccountForExtension(getApplicationContext(), fitnessOptions)) .findDataSources( new DataSourcesRequest.Builder() .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA) .setDataSourceTypes(DataSource.TYPE_RAW) .build()) .addOnSuccessListener(dataSources -> { dataSources.forEach(dataSource -> { Log.i(TAG, "Data source found: ${it.streamIdentifier}"); Log.i(TAG, "Data Source type: ${it.dataType.name}"); if (dataSource.getDataType() == DataType.TYPE_STEP_COUNT_DELTA) { Log.i(TAG, "Data source for STEP_COUNT_DELTA found!"); ... } })}) .addOnFailureListener(e -> Log.e(TAG, "Find data sources request failed", e));
Wenn Sie Informationen zum Gerät für eine Datenquelle abrufen möchten, verwenden Sie den
DataSource.getDevice
. Die Geräteinformationen sind nützlich, um sich von ähnlichen
der Sensoren verschiedener Geräte, zeigen die Geräteinformationen von einem Sensor
verwenden oder die Daten je nach Gerät unterschiedlich verarbeiten. Zum Beispiel könnten Sie
Daten speziell vom Sensor eines Wearables auslesen möchten,
Gerät, jedoch nicht vom gleichen Sensortyp auf einem Smartphone.
So erhältst du ein Device
für das Gerät, auf dem Ihre Aktivität ausgeführt wird,
Device.getLocalDevice
. Dies ist nützlich, wenn Sie prüfen möchten, ob sich eine Datenquelle in der
auf dem die App ausgeführt wird.
Listener hinzufügen
Um einen Listener hinzuzufügen, der Rohdaten eines bestimmten Fitness-Datentyps oder von
Datenquelle verwenden möchten, verwenden Sie
SensorsClient.add
:
Kotlin
val listener = OnDataPointListener { dataPoint -> for (field in dataPoint.dataType.fields) { val value = dataPoint.getValue(field) Log.i(TAG, "Detected DataPoint field: ${field.name}") Log.i(TAG, "Detected DataPoint value: $value") } } Fitness.getSensorsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions)) .add( SensorRequest.Builder() .setDataSource(dataSource) // Optional but recommended for custom // data sets. .setDataType(dataType) // Can't be omitted. .setSamplingRate(10, TimeUnit.SECONDS) .build(), listener ) .addOnSuccessListener { Log.i(TAG, "Listener registered!") } .addOnFailureListener { Log.e(TAG, "Listener not registered.", task.exception) }
Java
OnDataPointListener listener = dataPoint -> { for (Field field : dataPoint.getDataType().getFields()) { Value value = dataPoint.getValue(field); Log.i(TAG, "Detected DataPoint field: ${field.getName()}"); Log.i(TAG, "Detected DataPoint value: $value"); } }; Fitness.getSensorsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions)) .add( new SensorRequest.Builder() .setDataSource(dataSource) // Optional but recommended // for custom data sets. .setDataType(dataType) // Can't be omitted. .setSamplingRate(10, TimeUnit.SECONDS) .build(), listener ) .addOnSuccessListener(unused -> Log.i(TAG, "Listener registered!")) .addOnFailureListener(task -> Log.e(TAG, "Listener not registered.", task.getCause())); }
Hörer entfernen
Um einen Listener für Aktualisierungen von Rohdaten zu entfernen, verwenden Sie die Methode
SensorsClient.remove
:
Kotlin
Fitness.getSensorsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions)) .remove(listener) .addOnSuccessListener { Log.i(TAG, "Listener was removed!") } .addOnFailureListener { Log.i(TAG, "Listener was not removed.") }
Java
Fitness.getSensorsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions)) .remove(listener) .addOnSuccessListener(unused -> Log.i(TAG, "Listener was removed!")) .addOnFailureListener(e -> Log.i(TAG, "Listener was not removed."));