Health Connect revokeAllPermissions() 不会更改给定应用程序会话的 Health connect 中的权限状态

问题描述 投票:0回答:1

即使在调用

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)
        }
    }
android flutter mobile healthconnect
1个回答
0
投票

我也遇到了与 revokeAllPermissions() 相同的问题。你找到解决办法了吗?

© www.soinside.com 2019 - 2024. All rights reserved.