Health Connect revokeAllPermissions() не меняет состояние разрешений в Health Connect для данного сеанса приложения. ⇐ Android
Health Connect revokeAllPermissions() не меняет состояние разрешений в Health Connect для данного сеанса приложения.
Я получаю статус разрешения как true даже после вызова revokePermissions().
Когда я проверил настройку подключения к работоспособности после вызова revokeAllPermissions() и пока мое приложение работало в фоновом режиме, выяснилось, что приложению по-прежнему разрешены разрешения Health Connect. Но при следующей перезагрузке приложения отображается сообщение, что приложение отключено от Health Connect.
Видел ту же проблему в образце приложения Health Connects
У меня есть функция на стороне Flutter, которая выглядит следующим образом:
void revoke() { отозвать разрешение(); проверкаForPermissions(); Получить.обратно(); } Это вызывает две собственные функции Android:
revokePermissions() и checkForPermissions() соответственно.
Их соответствующие реализации следующие:
private fun revokePermissions() { объем.запуск { if (healthConnectAvailable && !::healthConnectClient.isInitialized) { healthConnectClient = HealthConnectClient.getOrCreate(контекст!!) } healthConnectClient.permissionController.revokeAllPermissions() } } и
private fun checkForPermissions(call: MethodCall, result: Result) { val args = call.arguments как HashMap типы значений = (args["types"] as? ArrayList)?.filterIsInstance()!! вал разрешения = (args["permissions"] as? ArrayList)?.filterIsInstance()!! вар permList = mutableListOf() for ((i, typeKey) в type.withIndex()) { val доступ = разрешения!! val dataType = MapToHCType[typeKey]!! если (доступ == 0) { permList.add( HealthPermission.getReadPermission(тип данных), ) } еще { permList.addAll( Список( HealthPermission.getReadPermission(тип данных), HealthPermission.getWritePermission(тип данных), ) ) } // Для тренировки также требуется расстояние и общий расход энергии if (typeKey == ТРЕНИРОВКА) { если (доступ == 0) { permList.addAll( Список( HealthPermission.getReadPermission(DistanceRecord::class), HealthPermission.getReadPermission( TotalCaloriesBurnedRecord::класс ), ) ) } еще { permList.addAll( Список( HealthPermission.getReadPermission(DistanceRecord::class), HealthPermission.getReadPermission( TotalCaloriesBurnedRecord::класс ), HealthPermission.getWritePermission(DistanceRecord::class), HealthPermission.getWritePermission( TotalCaloriesBurnedRecord::класс ), ) ) } } } объем.запуск { if (healthConnectAvailable && !::healthConnectClient.isInitialized) { healthConnectClient = HealthConnectClient.getOrCreate(контекст!!) } вар температура = healthConnectClient.permissionController.getGrantedPermissions() .containsAll(пермлист) печать (температура) результат.успех(температура) } }
Я получаю статус разрешения как true даже после вызова revokePermissions().
Когда я проверил настройку подключения к работоспособности после вызова revokeAllPermissions() и пока мое приложение работало в фоновом режиме, выяснилось, что приложению по-прежнему разрешены разрешения Health Connect. Но при следующей перезагрузке приложения отображается сообщение, что приложение отключено от Health Connect.
Видел ту же проблему в образце приложения Health Connects
У меня есть функция на стороне Flutter, которая выглядит следующим образом:
void revoke() { отозвать разрешение(); проверкаForPermissions(); Получить.обратно(); } Это вызывает две собственные функции Android:
revokePermissions() и checkForPermissions() соответственно.
Их соответствующие реализации следующие:
private fun revokePermissions() { объем.запуск { if (healthConnectAvailable && !::healthConnectClient.isInitialized) { healthConnectClient = HealthConnectClient.getOrCreate(контекст!!) } healthConnectClient.permissionController.revokeAllPermissions() } } и
private fun checkForPermissions(call: MethodCall, result: Result) { val args = call.arguments как HashMap типы значений = (args["types"] as? ArrayList)?.filterIsInstance()!! вал разрешения = (args["permissions"] as? ArrayList)?.filterIsInstance()!! вар permList = mutableListOf() for ((i, typeKey) в type.withIndex()) { val доступ = разрешения!! val dataType = MapToHCType[typeKey]!! если (доступ == 0) { permList.add( HealthPermission.getReadPermission(тип данных), ) } еще { permList.addAll( Список( HealthPermission.getReadPermission(тип данных), HealthPermission.getWritePermission(тип данных), ) ) } // Для тренировки также требуется расстояние и общий расход энергии if (typeKey == ТРЕНИРОВКА) { если (доступ == 0) { permList.addAll( Список( HealthPermission.getReadPermission(DistanceRecord::class), HealthPermission.getReadPermission( TotalCaloriesBurnedRecord::класс ), ) ) } еще { permList.addAll( Список( HealthPermission.getReadPermission(DistanceRecord::class), HealthPermission.getReadPermission( TotalCaloriesBurnedRecord::класс ), HealthPermission.getWritePermission(DistanceRecord::class), HealthPermission.getWritePermission( TotalCaloriesBurnedRecord::класс ), ) ) } } } объем.запуск { if (healthConnectAvailable && !::healthConnectClient.isInitialized) { healthConnectClient = HealthConnectClient.getOrCreate(контекст!!) } вар температура = healthConnectClient.permissionController.getGrantedPermissions() .containsAll(пермлист) печать (температура) результат.успех(температура) } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Представление разрешений Health Connect не отображается на устройствах Android < 14.
Anonymous » » в форуме Android - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Представление разрешений Health Connect не отображается на устройствах Android < 14.
Anonymous » » в форуме Android - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-