Sensors API, uygulamanızdaki ham sensör verilerini gerçek zamanlı olarak okumanızı sağlar. Tekliflerinizi otomatikleştirmek ve optimize etmek için bu API'yi kullanarak şunları yapabilirsiniz:
- Cihazda ve tamamlayıcı cihazlarda bulunan veri kaynaklarını listeleyin.
- Ham sensör verilerini almak için dinleyicileri kaydedin.
- Ham sensör verilerini almamaları için dinleyicilerin kaydını silin.
Kullanılabilir veri kaynaklarını listeleme
Cihazdaki ve tamamlayıcı cihazdaki mevcut tüm veri kaynaklarının listesini almak için
kullanıyorsanız
SensorsClient.findDataSources
yöntem:
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ğına ilişkin cihazla ilgili bilgi almak için şunu kullanın:
DataSource.getDevice
yöntemidir. Cihaz bilgileri, benzer kullanıcılardan ayırt etmek için yararlıdır
farklı cihazlardaki sensörleri algılamak için, bir sensörden
veya verileri cihaza bağlı olarak farklı şekillerde işleyebilir. Örneğin, eğitime
giyilebilir bir cihazda özellikle sensörden gelen verileri okumakla ilgileniyorsa
Ancak bu sensör, telefonda aynı tür sensörden değil.
Device
edinmek için
işlemini çalıştıran cihaz için örneğinizde
Device.getLocalDevice
yöntemidir. Bu, bir veri kaynağının
uygulamanızın yüklü olduğu cihazla aynı olmalıdır.
Dinleyici ekleme
Belirli bir fitness veri türünün ham verilerini almak üzere bir işleyici eklemek veya
belirli bir veri kaynağı için
SensorsClient.add
yöntem:
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
Bir işleyiciyi ham veri güncellemelerinden kaldırmak için
SensorsClient.remove
yöntem:
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."));