מכשירי כושר שנעשה בהם שימוש בתקן Bluetooth Low Energy GATT נתמכים באופן אוטומטי על ידי Google Fit. אם המכשיר לא מיישם את אחד מהפרופילים האלה, אפשר ליצור אפליקציה ל-Android שמנהל את התקשורת עם מכשיר הכושר וחושף אותו Google Fit כחיישן תוכנה. אפשר גם לחשוף תוכנות מותאמות אישית חיישנים באפליקציה.
כדי ליצור חיישן תוכנה באפליקציה, מרחיבים את
FitnessSensorService
class ולהצהיר עליו כשירות בקובץ המניפסט. כשמשתמשים מתקינים את האפליקציה שלכם, חיישני התוכנה שלכם זמינים לאפליקציות אחרות דרך Google Fit.
כשאפליקציה נרשם לקבלת נתונים מחיישן תוכנה באפליקציה,
אפליקציית Google Fit מקושרת לשירות שלך.
הצהרה על שירות חיישן
כדי להגדיר חיישן תוכנה, מגדירים FitnessSensorService
בקובץ המניפסט של האפליקציה:
<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>
השירות בדוגמה זו פועל בתהליך נפרד, כפי שמצוין על ידי
android:process
. מידע נוסף זמין במאמר הבא:
תהליכים.
הטמעת שירות חיישנים
כדי להטמיע חיישן תוכנה, מרחיבים את המחלקה FitnessSensorService
ו
וליישם את השיטות המופשטות שלו. פרטי ההטמעה תלויים בתרחיש לדוגמה הספציפי שלכם, אבל הדוגמה הבאה מספקת הנחיות כלליות:
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 } }