دعم أجهزة الاستشعار الإضافية

تتوافق أجهزة اللياقة البدنية التي تنفّذ ملفًا شخصيًا عاديًا يتضمن بلوتوث منخفض الطاقة GATT مع Google Fit تلقائيًا. إذا لم ينفِّذ جهازك أحد هذه الملفات الشخصية، يمكنك إنشاء تطبيق متوافق مع Android يدير الاتصال بجهاز اللياقة البدنية ويعرضه على Google Fit أداة استشعار للبرامج. ويمكنك أيضًا عرض أجهزة استشعار مخصّصة للتطبيقات في تطبيقك.

لإنشاء أداة استشعار للبرامج في تطبيقك، يمكنك توسيع فئة FitnessSensorService والإعلان عنها كخدمة في ملف البيان. عندما يثبّت المستخدمون تطبيقك، يجعل Google Fit أجهزة استشعار البرامج متاحة للتطبيقات الأخرى. عند تسجيل أحد التطبيقات لاستقبال البيانات من أداة استشعار برامج في تطبيقك، يتم ربط Google Fit بالخدمة.

الإعلان عن خدمة استشعار

لتحديد أداة الاستشعار بالبرامج، أعلن عن FitnessSensorService في ملف البيان الخاص بتطبيقك:

<service android:name="com.example.MySensorService"
         android:process=":sensor">
  <intent-filter>
    <action android:name="com.google.android.gms.fitness.service.FitnessSensorService" />
    <!-- include at least one mimeType filter for the supported data types -->
    <data android:mimeType="vnd.google.fitness.data_type/com.google.heart_rate.bpm" />
  </intent-filter>
</service>

تعمل الخدمة في هذا المثال في عملية منفصلة، على النحو المحدّد في سمة android:process. لمزيد من المعلومات، يمكنك الاطّلاع على العمليات.

تنفيذ خدمة استشعار

لتنفيذ أداة استشعار للبرامج، يجب توسيع الفئة FitnessSensorService وتنفيذ أساليبها المجرّدة. تعتمد تفاصيل التنفيذ على حالة استخدامك تحديدًا، ولكن يوفّر المثال التالي إرشادات عامة:

Kotlin

class MySensorService : FitnessSensorService() {
    override fun onCreate() {
        super.onCreate()
        // 1. Initialize your software sensor(s).
        // 2. Create DataSource representations of your software sensor(s).
        // 3. Initialize some data structure to keep track of a registration
        // for each sensor.
    }

    override fun onFindDataSources(dataTypes: List<DataType>): List<DataSource> {
        // 1. Find which of your software sensors provide the data types requested.
        // 2. Return those as a list of DataSource objects.
    }

    override fun onRegister(request: FitnessSensorServiceRequest): Boolean {
        // 1. Determine which sensor to register with request.dataSource.
        // 2. If a registration for this sensor already exists, replace it with
        //    this one.
        // 3. Keep (or update) a reference to the request object.
        // 4. Configure your sensor according to the request parameters.
        // 5. When the sensor has new data, deliver it to the platform by
        //    calling request.dispatcher.publish(dataPoints)
    }

    override fun onUnregister(dataSource: DataSource): Boolean {
        // 1. Configure this sensor to stop delivering data to the platform
        // 2. Discard the reference to the registration request object
    }
}

Java

public class MySensorService extends FitnessSensorService {
    @Override
    public void onCreate() {
        super.onCreate();
        // 1. Initialize your software sensor(s).
        // 2. Create DataSource representations of your software sensor(s).
        // 3. Initialize some data structure to keep track of a registration
        //    for each sensor.
    }

    @NonNull
    @Override
    public List<DataSource> onFindDataSources(@NonNull List<DataType> list) {
        // 1. Find which of your software sensors provide the data types
        //    requested.
        // 2. Return those as a list of DataSource objects.
    }

    @Override
    public boolean onRegister(
            @NonNull FitnessSensorServiceRequest fitnessSensorServiceRequest) {
        // 1. Determine which sensor to register with request.dataSource.
        // 2. If a registration for this sensor already exists, replace it with
        //    this one.
        // 3. Keep (or update) a reference to the request object.
        // 4. Configure your sensor according to the request parameters.
        // 5. When the sensor has new data, deliver it to the platform by
        //    calling request.getDispatcher.publish(dataPoints);
    }

    @Override
    public boolean onUnregister(@NonNull DataSource dataSource) {
        // 1. Configure this sensor to stop delivering data to the platform
        // 2. Discard the reference to the registration request object
    }
}