تتيح لك واجهة برمجة التطبيقات Sensors قراءة البيانات الأولية لأداة الاستشعار في تطبيقك في الوقت الفعلي. استخدام واجهة برمجة التطبيقات هذه لتنفيذ الإجراءات التالية:
- سرد مصادر البيانات المتاحة على الجهاز وعلى الأجهزة المصاحبة
- يمكنك تسجيل أدوات الاستشعار لتلقّي بيانات المستشعر الأولية.
- إلغاء تسجيل المستمعين حتى لا يتلقوا بعد ذلك بيانات أداة الاستشعار الأولية.
سرد مصادر البيانات المتاحة
للحصول على قائمة بجميع مصادر البيانات المتاحة على الجهاز وعلى الجهاز المصاحب
الأجهزة، يمكنك استخدام
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));
للحصول على معلومات عن الجهاز لمصدر بيانات، استخدِم
DataSource.getDevice
. يمكن الاستفادة من معلومات الجهاز لتمييزها عن
أجهزة الاستشعار على الأجهزة المختلفة، تعرض معلومات الجهاز من جهاز استشعار إلى
المستخدم أو تعالج البيانات بطريقة مختلفة بناءً على الجهاز. على سبيل المثال، قد
مهتمين بقراءة البيانات تحديدًا من أداة الاستشعار على الجهاز القابل للارتداء
الجهاز ولكن ليس من نفس النوع من أجهزة الاستشعار في الهاتف.
للحصول على Device
للجهاز الذي يشغِّل نشاطك، يمكنك استخدام
Device.getLocalDevice
. يكون ذلك مفيدًا عندما تريد التحقق مما إذا كان مصدر البيانات موجودًا في
الجهاز نفسه الذي يعمل عليه تطبيقك
إضافة مستمع
لإضافة مستمع لتلقي بيانات أولية لنوع معين من بيانات اللياقة البدنية أو من
مصدر بيانات معين، يمكنك استخدام
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())); }
إزالة مستمع
لإزالة مستمع من تعديلات البيانات الأولية، استخدم
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."));