Sensors API memungkinkan Anda membaca data sensor mentah di aplikasi secara real time. Gunakan API ini untuk melakukan hal berikut:
- Buat daftar sumber data yang tersedia di perangkat dan di perangkat pendamping.
- Mendaftarkan pemroses untuk menerima data sensor mentah.
- Batalkan pendaftaran pemroses sehingga tidak lagi menerima data sensor mentah.
Mencantumkan sumber data yang tersedia
Untuk mendapatkan daftar semua sumber data yang tersedia di perangkat dan perangkat
pendamping, gunakan
metode
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));
Guna mendapatkan informasi tentang perangkat untuk sumber data, gunakan
metode
DataSource.getDevice
. Informasi perangkat berguna untuk membedakan dari sensor
yang serupa pada perangkat yang berbeda, menampilkan informasi perangkat dari sensor kepada
pengguna, atau memproses data secara berbeda berdasarkan perangkat. Misalnya, Anda mungkin
tertarik untuk membaca data secara khusus dari sensor pada perangkat
wearable, tetapi bukan dari jenis sensor yang sama pada ponsel.
Untuk mendapatkan instance Device
untuk perangkat yang menjalankan aktivitas Anda, gunakan
metode
Device.getLocalDevice
. Hal ini berguna ketika Anda ingin memeriksa apakah sumber data berada di
perangkat yang sama dengan yang digunakan aplikasi Anda.
Menambahkan pemroses
Untuk menambahkan pemroses guna menerima data mentah jenis data kebugaran tertentu atau dari
sumber data tertentu, gunakan
metode
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())); }
Menghapus pemroses
Untuk menghapus pemroses dari pembaruan data mentah, gunakan metode 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."));