Sensors API, uygulamanızdaki ham sensör verilerini gerçek zamanlı olarak okumanızı sağlar. Aşağıdakileri yapmak için bu API'yi kullanın:
- Cihazda ve tamamlayıcı cihazlarda bulunan veri kaynaklarını listeleyin.
- Ham sensör verilerini almak için dinleyicileri kaydedin.
- İşlenmemiş sensör verilerini almamaları için dinleyicilerin kaydını iptal edin.
Kullanılabilir veri kaynaklarını listeleme
Cihazdaki ve tamamlayıcı cihazlardaki mevcut tüm veri kaynaklarının listesini almak için SensorsClient.findDataSources
yöntemini kullanın:
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));
Bir veri kaynağıyla ilgili cihazla ilgili bilgi almak için DataSource.getDevice
yöntemini kullanın. Cihaz bilgileri; farklı cihazlardaki benzer sensörlerden ayırt etme, cihaz bilgilerini bir sensörden kullanıcıya gösterme veya verileri cihaza göre farklı şekilde işleme konularında faydalıdır. Örneğin, özellikle giyilebilir bir cihazdaki sensörden gelen verileri okumak isteyebilirsiniz, ancak telefonda aynı tür sensörden gelen verileri okumazsınız.
Etkinliğinizi çalıştıran cihaz için bir Device
örneği almak istiyorsanız Device.getLocalDevice
yöntemini kullanın. Bu, bir veri kaynağının uygulamanızın çalıştığı cihazda olup olmadığını kontrol etmek istediğinizde yararlı olur.
İşleyici ekle
Belirli bir fitness veri türüne veya belirli bir veri kaynağından ham verileri alacak bir işleyici eklemek için SensorsClient.add
yöntemini kullanın:
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())); }
İşleyiciyi kaldırma
Ham veri güncellemelerinden bir işleyici kaldırmak için SensorsClient.remove
yöntemini kullanın:
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."));