支援其他感應器
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
採用標準藍牙低功耗藍牙的健身裝置
GATT
Google Fit 會自動支援個人資料。如果您的裝置
「未」實作其中一個設定檔,您可以建立一個 Android 應用程式,
管理與健身裝置的通訊,
Google Fit 是軟體感應器。您也可以
感應器。
如要在應用程式中建立軟體感應器,請擴充
FitnessSensorService
敬上
並在資訊清單檔案中宣告該類別為服務。使用者安裝
應用程式後,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
}
}
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-08-31 (世界標準時間)。
[null,null,["上次更新時間:2025-08-31 (世界標準時間)。"],[[["\u003cp\u003eGoogle Fit automatically supports fitness devices using standard Bluetooth Low Energy GATT profiles.\u003c/p\u003e\n"],["\u003cp\u003eFor devices lacking standard profiles, an Android app can bridge communication with Google Fit using software sensors.\u003c/p\u003e\n"],["\u003cp\u003eSoftware sensors are created by extending the \u003ccode\u003eFitnessSensorService\u003c/code\u003e class and declaring it as a service in the app's manifest.\u003c/p\u003e\n"],["\u003cp\u003eGoogle Fit exposes your software sensors to other apps upon installation, facilitating data sharing.\u003c/p\u003e\n"],["\u003cp\u003eImplementation of a software sensor involves initializing sensors, handling data source requests, and managing sensor registration and data delivery.\u003c/p\u003e\n"]]],[],null,["# Support additional sensors\n\nFitness devices that implement a standard [Bluetooth Low Energy\nGATT](https://www.bluetooth.com/bluetooth-resources/intro-to-bluetooth-gap-gatt/)\nprofile are automatically supported by Google Fit. If your device\ndoesn't implement one of these profiles, you can create an Android app that\nmanages the communication with the fitness device and exposes it to\nGoogle Fit as a software sensor. You can also expose custom software\nsensors in your app.\n\nTo create a software sensor in your app, you extend the\n[`FitnessSensorService`](/android/reference/com/google/android/gms/fitness/service/FitnessSensorService)\nclass and declare it as a service in the manifest file. When users install your\napp, Google Fit makes your software sensors available to other apps.\nWhen an app registers to receive data from a software sensor in your app,\nGoogle Fit binds to your service.\n| **Note:** For best practices when you manage user data, see [Google Fit Developer and User Data Policy](/fit/policy).\n\nDeclare a sensor service\n------------------------\n\nTo define a software sensor, declare a\n[`FitnessSensorService`](/android/reference/com/google/android/gms/fitness/service/FitnessSensorService)\nin your app's manifest file: \n\n```carbon\n\u003cservice android:name=\"com.example.MySensorService\"\n android:process=\":sensor\"\u003e\n \u003cintent-filter\u003e\n \u003caction android:name=\"com.google.android.gms.fitness.service.FitnessSensorService\" /\u003e\n \u003c!-- include at least one mimeType filter for the supported data types --\u003e\n \u003cdata android:mimeType=\"vnd.google.fitness.data_type/com.google.heart_rate.bpm\" /\u003e\n \u003c/intent-filter\u003e\n\u003c/service\u003e\n```\n\nThe service in this example runs in a separate process, as specified by the\n[`android:process`](https://developer.android.com/guide/topics/manifest/service-element#proc)\nattribute. For more information, see\n[Processes](https://developer.android.com/guide/components/processes-and-threads#Processes).\n\nImplement a sensor service\n--------------------------\n\nTo implement a software sensor, extend the `FitnessSensorService` class and\nimplement its abstract methods. The details of the implementation depend on your\nparticular use case, but the following example provides general guidelines: \n\n### Kotlin\n\n```kotlin\nclass MySensorService : FitnessSensorService() {\n override fun onCreate() {\n super.onCreate()\n // 1. Initialize your software sensor(s).\n // 2. Create DataSource representations of your software sensor(s).\n // 3. Initialize some data structure to keep track of a registration\n // for each sensor.\n }\n\n override fun onFindDataSources(dataTypes: List\u003cDataType\u003e): List\u003cDataSource\u003e {\n // 1. Find which of your software sensors provide the data types requested.\n // 2. Return those as a list of DataSource objects.\n }\n\n override fun onRegister(request: FitnessSensorServiceRequest): Boolean {\n // 1. Determine which sensor to register with request.dataSource.\n // 2. If a registration for this sensor already exists, replace it with\n // this one.\n // 3. Keep (or update) a reference to the request object.\n // 4. Configure your sensor according to the request parameters.\n // 5. When the sensor has new data, deliver it to the platform by\n // calling request.dispatcher.publish(dataPoints)\n }\n\n override fun onUnregister(dataSource: DataSource): Boolean {\n // 1. Configure this sensor to stop delivering data to the platform\n // 2. Discard the reference to the registration request object\n }\n}\n```\n\n### Java\n\n```java\npublic class MySensorService extends FitnessSensorService {\n @Override\n public void onCreate() {\n super.onCreate();\n // 1. Initialize your software sensor(s).\n // 2. Create DataSource representations of your software sensor(s).\n // 3. Initialize some data structure to keep track of a registration\n // for each sensor.\n }\n\n @NonNull\n @Override\n public List\u003cDataSource\u003e onFindDataSources(@NonNull List\u003cDataType\u003e list) {\n // 1. Find which of your software sensors provide the data types\n // requested.\n // 2. Return those as a list of DataSource objects.\n }\n\n @Override\n public boolean onRegister(\n @NonNull FitnessSensorServiceRequest fitnessSensorServiceRequest) {\n // 1. Determine which sensor to register with request.dataSource.\n // 2. If a registration for this sensor already exists, replace it with\n // this one.\n // 3. Keep (or update) a reference to the request object.\n // 4. Configure your sensor according to the request parameters.\n // 5. When the sensor has new data, deliver it to the platform by\n // calling request.getDispatcher.publish(dataPoints);\n }\n\n @Override\n public boolean onUnregister(@NonNull DataSource dataSource) {\n // 1. Configure this sensor to stop delivering data to the platform\n // 2. Discard the reference to the registration request object\n }\n}\n```"]]