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
相关产品推荐
相关产品推荐

