问题描述
我有一台可穿戴设备,其中 Google Fit 与我手机上的帐户相同。 WearOS 设备也连接到了我的手机。
但是,以下代码没有返回与 DataType.TYPE_HEIGHT,DataType.TYPE_HEART_RATE_BPM,DataType.TYPE_HEART_POINTS,DataType.TYPE_STEP_COUNT_DELTA
数据点对应的数据源。
private val fitnessOptions = fitnessOptions.builder()
.addDataType(DataType.TYPE_HEART_RATE_BPM,fitnessOptions.ACCESS_READ)
.addDataType(DataType.TYPE_HEART_POINTS,fitnessOptions.ACCESS_READ)
.addDataType(DataType.TYPE_STEP_COUNT_DELTA,fitnessOptions.ACCESS_READ)
.addDataType(DataType.TYPE_HEIGHT,fitnessOptions.ACCESS_READ)
.build()
fun setUp() {
val signInoptions = GoogleSignInoptions.Builder(GoogleSignInoptions.DEFAULT_SIGN_IN)
.requestemail()
.requestProfile()
.requestScopes(fitness.ScopE_ACTIVITY_READ_WRITE,fitness.ScopE_BODY_READ_WRITE)
.addExtension(fitnessOptions)
.build()
GoogleSignIn.getClient(activity,signInoptions).apply {
activity.startActivityForResult(signInIntent,1234)
}
account = GoogleSignIn.getAccountForExtension(activity,fitnessOptions)
}
private fun findDataSources() {
fitness.getSensorsClient(activity,account)
.findDataSources(
DataSourcesRequest.Builder()
.setDataTypes(
DataType.TYPE_HEIGHT,DataType.TYPE_STEP_COUNT_DELTA,DataType.TYPE_LOCATION_SAMPLE
)
.setDataSourceTypes(DataSource.TYPE_RAW)
.build()
)
.addOnSuccessListener { dataSources ->
Timber.i("Play fitness $dataSources")
dataSources.forEach {
Timber.i("Data source found: ${it.streamIdentifier}")
Timber.i("Data Source type: ${it.dataType.name}")
addSensorListener(it)
}
}
.addOnFailureListener { e ->
Timber.e(e)
}
}
private fun addSensorListener(dataSource: DataSource) {
val listener = OnDataPointListener { dataPoint ->
for (field in dataPoint.dataType.fields) {
val value = dataPoint.getValue(field)
Timber.i("Detected DataPoint field: ${field.name}")
Timber.i("Detected DataPoint value: $value")
}
}
fitness.getSensorsClient(activity,account)
.add(
SensorRequest.Builder()
.setDataSource(dataSource) // Optional but recommended for custom data sets.
.setDataType(dataSource.dataType) // Can't be omitted.
.setSamplingRate(10,TimeUnit.SECONDS)
.build(),listener
)
.addOnCompleteListener { task ->
when (task.isSuccessful) {
true -> Timber.i("Listener registered!")
else -> Timber.e(task.exception)
}
}
}
我确实获得了 DataType.TYPE_LOCATION_SAMPLE
的数据源,这是我的手机。
我的wearOS 设备是Fossil Gen 5 Carlyle
我在这里做错了什么?
解决方法
“可穿戴设备”和“电话”提供的信息很少,您实际上在谈论什么。
您可能需要在 WearOS 上添加对 HR 传感器的支持,如 Support Additional Sensors... 中所述,其中传感器甚至是您无法读出的传感器:
<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>
显然,您还需要实现自己的特定于传感器的 FitnessSensorService
。