Suporte a sensores adicionais

Dispositivos fitness que implementam um padrão Bluetooth de baixa energia GATT são compatíveis automaticamente com o Google Fit. Se o dispositivo não implemente um desses perfis, você poderá criar um app Android que gerencia a comunicação com o dispositivo fitness e o expõe a Google Fit como um sensor de software. Também é possível expor sensores de software personalizados no app.

Para criar um sensor de software no app, estenda o FitnessSensorService e declará-la como um serviço no arquivo de manifesto. Quando os usuários instalam seu app, o Google Fit disponibiliza os sensores de software para outros apps. Quando um app se registra para receber dados de um sensor de software, o Google Fit é vinculado ao serviço.

Declarar um serviço de sensor

Para definir um sensor de software, declare um FitnessSensorService no arquivo de manifesto do 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>

O serviço neste exemplo é executado em um processo separado, conforme especificado pelo atributo android:process. Para mais informações, consulte Processos.

Implementar um serviço de sensor

Para implementar um sensor de software, estenda a classe FitnessSensorService e implemente os métodos abstratos dela. Os detalhes da implementação dependem do caso de uso específico, mas o exemplo a seguir oferece diretrizes gerais:

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