You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Health Connect revokeAllPermissions()应用会话内权限状态未更新问题

问题:调用revokeAllPermissions()后权限状态异常

调用revokeAllPermissions()后,权限状态仍返回true;调用该方法后应用在后台时,Health Connect设置显示仍授予权限,但重启应用后显示已断开连接。该问题在Health Connect官方示例应用中同样存在。

Flutter侧相关函数实现

void revoke() {
  revokePermission();
  checkForPermissions();
  Get.back();
}

该函数会分别调用Android原生的revokePermissions()和checkForPermissions()方法,具体实现如下:

Android原生方法实现

1. revokePermissions()方法

private fun revokePermissions() {
    scope.launch {
        if (healthConnectAvailable && !::healthConnectClient.isInitialized) {
            healthConnectClient = HealthConnectClient.getOrCreate(context!!)
        }
        healthConnectClient.permissionController.revokeAllPermissions()
    }
}

2. checkForPermissions()方法

private fun checkForPermissions(call: MethodCall, result: Result) {
    val args = call.arguments as HashMap<*, *>
    val types =
        (args["types"] as? ArrayList<*>)?.filterIsInstance<String>()!!
    val permissions =
        (args["permissions"] as? ArrayList<*>)?.filterIsInstance<Int>()!!

    var permList = mutableListOf<String>()
    for ((i, typeKey) in types.withIndex()) {
        val access = permissions[i]!!
        val dataType = MapToHCType[typeKey]!!
        if (access == 0) {
            permList.add(
                HealthPermission.getReadPermission(dataType),
            )
        } else {
            permList.addAll(
                listOf(
                    HealthPermission.getReadPermission(dataType),
                    HealthPermission.getWritePermission(dataType),
                )
            )
        }
        // Workout also needs distance and total energy burned too
        if (typeKey == WORKOUT) {
            if (access == 0) {
                permList.addAll(
                    listOf(
                        HealthPermission.getReadPermission(DistanceRecord::class),
                        HealthPermission.getReadPermission(
                            TotalCaloriesBurnedRecord::class
                        ),
                    )
                )
            } else {
                permList.addAll(
                    listOf(
                        HealthPermission.getReadPermission(DistanceRecord::class),
                        HealthPermission.getReadPermission(
                            TotalCaloriesBurnedRecord::class
                        ),
                        HealthPermission.getWritePermission(DistanceRecord::class),
                        HealthPermission.getWritePermission(
                            TotalCaloriesBurnedRecord::class
                        ),
                    )
                )
            }
        }
    }
    scope.launch {
        if (healthConnectAvailable && !::healthConnectClient.isInitialized) {
            healthConnectClient = HealthConnectClient.getOrCreate(context!!)
        }
        var temp =
            healthConnectClient.permissionController.getGrantedPermissions()
                .containsAll(permList)
        print(temp)
        result.success(temp)
    }
}

内容的提问来源于stack exchange,提问作者Madhav Sunil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:26:25