即使在调用
true
后,我仍获得权限状态为 revokePermissions()
。revokeAllPermissions()
后检查 Health Connect 设置并且当我的应用程序在后台运行时,它显示该应用程序仍具有 Health Connect 权限。但下次重新加载应用程序时,会显示该应用程序已与健康连接断开连接。
在健康连接中看到同样的问题示例应用程序
我在 Flutter 方面有一个函数,如下所示:
void revoke() {
revokePermission();
checkForPermissions();
Get.back();
}
这会调用两个 Android 本机函数,它们是:
分别是
revokePermissions()
和checkForPermissions()
。
它们各自的实现如下:
private fun revokePermissions() {
scope.launch {
if (healthConnectAvailable && !::healthConnectClient.isInitialized) {
healthConnectClient = HealthConnectClient.getOrCreate(context!!)
}
healthConnectClient.permissionController.revokeAllPermissions()
}
}
和
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)
}
}
我也遇到了与 revokeAllPermissions() 相同的问题。你找到解决办法了吗?