微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使手表已连接,也没有“DataType.TYPE_HEART_RATE_BPM”的数据源

如何解决即使手表已连接,也没有“DataType.TYPE_HEART_RATE_BPM”的数据源

我有一台可穿戴设备,其中 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。