Zusätzliche Sensoren unterstützen

Fitnessgeräte, die ein standardmäßiges Bluetooth Low Energy GATT-Profil implementieren, werden von Google Fit automatisch unterstützt. Wenn auf Ihrem Gerät eines dieser Profile nicht implementiert ist, können Sie eine Android-App erstellen, die die Kommunikation mit dem Fitnessgerät verwaltet und sie Google Fit als Softwaresensor zur Verfügung stellt. Sie können in Ihrer App auch benutzerdefinierte Softwaresensoren verfügbar machen.

Wenn Sie in Ihrer Anwendung einen Softwaresensor erstellen möchten, erweitern Sie die Klasse FitnessSensorService und deklarieren sie in der Manifestdatei als Dienst. Wenn Nutzer deine App installieren, stellt Google Fit deine Softwaresensoren anderen Apps zur Verfügung. Wenn sich eine App für den Empfang von Daten eines Softwaresensors in Ihrer App registriert, verbindet sich Google Fit mit Ihrem Dienst.

Sensordienst deklarieren

Geben Sie zum Definieren eines Softwaresensors einen FitnessSensorService in der Manifestdatei Ihrer App an:

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

Der Dienst wird in diesem Beispiel gemäß dem Attribut android:process in einem separaten Prozess ausgeführt. Weitere Informationen finden Sie unter Prozesse.

Sensordienst implementieren

Wenn Sie einen Softwaresensor implementieren möchten, erweitern Sie die Klasse FitnessSensorService und implementieren Sie die abstrakten Methoden. Die Details der Implementierung hängen von Ihrem jeweiligen Anwendungsfall ab, aber das folgende Beispiel enthält allgemeine Richtlinien:

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