Compatibilité avec des capteurs supplémentaires

Les appareils de remise en forme qui implémentent un profil GATT basse consommation Bluetooth standard sont automatiquement compatibles avec Google Fit. Si votre appareil ne met pas en œuvre l'un de ces profils, vous pouvez créer une application Android qui gère la communication avec l'appareil de fitness et l'expose à Google Fit en tant que capteur logiciel. Vous pouvez également exposer des capteurs de logiciels personnalisés dans votre application.

Pour créer un capteur logiciel dans votre application, vous devez étendre la classe FitnessSensorService et la déclarer en tant que service dans le fichier manifeste. Lorsque les utilisateurs installent votre application, Google Fit met vos capteurs logiciels à disposition d'autres applications. Lorsqu'une application s'enregistre pour recevoir des données d'un capteur logiciel intégré à votre application, Google Fit s'associe à votre service.

Déclarer un service de capteurs

Pour définir un capteur logiciel, déclarez un FitnessSensorService dans le fichier manifeste de votre application:

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

Dans cet exemple, le service s'exécute dans un processus distinct, comme spécifié par l'attribut android:process. Pour en savoir plus, consultez la section Processus.

Implémenter un service de capteurs

Pour implémenter un capteur logiciel, étendez la classe FitnessSensorService et implémentez ses méthodes abstraites. Les détails de la mise en œuvre dépendent de votre cas d'utilisation particulier, mais l'exemple suivant fournit des consignes générales:

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