Поддержка дополнительных датчиков

Фитнес-устройства со стандартным профилем Bluetooth Low Energy 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 и реализуйте его абстрактные методы. Детали реализации зависят от вашего конкретного варианта использования, но в следующем примере приведены общие рекомендации:

Котлин

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
    }
}

Ява

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
    }
}