Compatibilidad con sensores adicionales

Google Fit admite automáticamente los dispositivos de fitness que implementan un perfil estándar de GATT de Bluetooth de bajo consumo. Si tu dispositivo no implementa uno de estos perfiles, puede crear una app para Android que administra la comunicación con el dispositivo de fitness y la expone Google Fit como sensor de software También puedes exponer sensores de software personalizados en tu app.

Para crear un sensor de software en tu app, extiende la clase FitnessSensorService y declárala como un servicio en el archivo de manifiesto. Cuando los usuarios instalan tu app, Google Fit pone tus sensores de software a disposición de otras apps. Cuando una app se registra para recibir datos de un sensor de software, Google Fit se vincula a tu servicio.

Cómo declarar un servicio de sensor

Para definir un sensor de software, declara un FitnessSensorService en el archivo de manifiesto de tu app:

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

El servicio de este ejemplo se ejecuta en un proceso independiente, como lo especifica el android:process . Para obtener más información, consulta Procesos.

Implementa un servicio de sensor

Para implementar un sensor de software, extiende la clase FitnessSensorService e implementa sus métodos abstractos. Los detalles de la implementación dependen de tu caso de uso particular, pero el siguiente ejemplo proporciona lineamientos generales:

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