Perangkat kebugaran yang menerapkan profil Bluetooth Rendah Energi GATT standar otomatis didukung oleh Google Fit. Jika perangkat tidak menerapkan salah satu profil ini, Anda dapat membuat aplikasi Android yang mengelola komunikasi dengan perangkat kebugaran dan menampilkannya ke Google Fit sebagai sensor software. Anda juga dapat mengekspos sensor software kustom di aplikasi Anda.
Untuk membuat sensor software di aplikasi, perluas
class
FitnessSensorService
dan deklarasikan sebagai layanan dalam file manifes. Saat pengguna menginstal
aplikasi Anda, Google Fit akan menyediakan sensor software untuk aplikasi lain.
Saat aplikasi mendaftar untuk menerima data dari sensor software di aplikasi Anda,
Google Fit akan mengikat ke layanan Anda.
Mendeklarasikan layanan sensor
Untuk menentukan sensor software, deklarasikan
FitnessSensorService
dalam file manifes aplikasi Anda:
<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>
Layanan dalam contoh ini berjalan dalam proses terpisah, seperti yang ditentukan oleh
atribut
android:process
. Untuk mengetahui informasi selengkapnya, lihat
Proses.
Mengimplementasikan layanan sensor
Untuk mengimplementasikan sensor software, perluas class FitnessSensorService
dan
terapkan metode abstraknya. Detail implementasinya bergantung pada
kasus penggunaan Anda secara khusus, tetapi contoh berikut memberikan panduan umum:
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 } }