API Cảm biến cho phép bạn đọc dữ liệu cảm biến thô trong ứng dụng của mình theo thời gian thực. Sử dụng API này để thực hiện những việc sau:
- Liệt kê các nguồn dữ liệu có trên thiết bị và trên các thiết bị đồng hành.
- Đăng ký trình nghe để nhận dữ liệu cảm biến thô.
- Huỷ đăng ký trình nghe để trình nghe không còn nhận được dữ liệu cảm biến thô.
Liệt kê nguồn dữ liệu có sẵn
Để lấy danh sách tất cả các nguồn dữ liệu có sẵn trên thiết bị và trên quảng cáo đồng hành
thiết bị di động, hãy sử dụng
SensorsClient.findDataSources
phương thức:
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));
Để nhận thông tin về thiết bị cho một nguồn dữ liệu, hãy sử dụng
DataSource.getDevice
. Thông tin thiết bị rất hữu ích để phân biệt với
cảm biến trên các thiết bị khác nhau, hiển thị thông tin thiết bị từ cảm biến đến
hoặc xử lý dữ liệu theo cách khác nhau dựa trên thiết bị. Ví dụ: bạn có thể
muốn đọc dữ liệu đặc biệt từ cảm biến trên thiết bị đeo
nhưng không phải từ cùng một loại cảm biến trên điện thoại.
Cách nhận Device
cho thiết bị đang chạy hoạt động của bạn, hãy sử dụng
Device.getLocalDevice
. Điều này rất hữu ích khi bạn muốn kiểm tra xem nguồn dữ liệu có nằm trên
cùng thiết bị mà ứng dụng của bạn đang chạy trên đó.
Thêm trình nghe
Để thêm một trình nghe để nhận dữ liệu thô của một loại dữ liệu thể dục cụ thể hoặc từ
một nguồn dữ liệu cụ thể, hãy sử dụng
SensorsClient.add
phương thức:
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())); }
Xoá một trình nghe
Để xoá một trình nghe khỏi cập nhật dữ liệu thô, hãy sử dụng
SensorsClient.remove
phương thức:
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."));