flutter - 当权限被永久拒绝时,Flutter permission_handler 包不打开应用程序设置
问题描述
一段时间以来一直在研究 permission_handler 包。当用户永久拒绝访问应用程序时,试图找出 ios 或 android 上的应用程序设置页面。
我的应用程序首先需要访问媒体库和相机。如果可能,请有经验的 Flutter 开发人员详细说明。我是 Flutter 开发的新手,也是整个移动应用程序开发的新手。
这是ios上的podfile
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.calendar
'PERMISSION_EVENTS=0',
## dart: PermissionGroup.reminders
'PERMISSION_REMINDERS=0',
## dart: PermissionGroup.contacts
# 'PERMISSION_CONTACTS=0',
## dart: PermissionGroup.camera
# 'PERMISSION_CAMERA=1',
## dart: PermissionGroup.microphone
# 'PERMISSION_MICROPHONE=0',
## dart: PermissionGroup.speech
'PERMISSION_SPEECH_RECOGNIZER=0',
## dart: PermissionGroup.photos
# 'PERMISSION_PHOTOS=1',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=0',
## dart: PermissionGroup.notification
# 'PERMISSION_NOTIFICATIONS=0',
## dart: PermissionGroup.mediaLibrary
# 'PERMISSION_MEDIA_LIBRARY=1',
## dart: PermissionGroup.sensors
'PERMISSION_SENSORS=0'
]
end
end
end
这是info.plist-
<key>NSPhotoLibraryUsageDescription</key>
<string>This app requires access to your photo gallery to view or save images</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string></string>
这是我的实际代码,按下按钮时我正在检查是否有打开画廊的权限
TextButton.icon(
icon: const Icon(
Icons.photo_library_rounded,
size: 50,
),
label: const Text('Pick from gallery',
style: TextStyle(fontSize: 20)),
onPressed: () {
PermissionService().openPhotoGallery();
},
),
这是我的权限类。该应用程序不会打开应用程序设置,而只是在 ios 上加载设置。
import 'package:permission_handler/permission_handler.dart';
class PermissionService {
openPhotoGallery() async {
var galleryAccessStatus = await Permission.mediaLibrary.status;
if(!galleryAccessStatus.isGranted) {
var status = await Permission.mediaLibrary.request();
if(status.isPermanentlyDenied) {
await openAppSettings();
}
}
}
}
查看 Zeeyans 的答案后添加此片段。openAppSettings 不会打开应用程序设置页面,而是打开“设置”页面。
解决方案
将 !galleryAccessStatus.isGranted替换为galleryAccessStatus != PermissionStatus.granted 并将 status.isPermanentlyDenied 替换 为status != PermissionStatus.granted
openPhotoGallery() async {
var galleryAccessStatus = await Permission.mediaLibrary.status;
if(galleryAccessStatus != PermissionStatus.granted) { //here
var status = await Permission.mediaLibrary.request();
if(status != PermissionStatus.granted) { //here
await openAppSettings();
}
}
}
推荐阅读
- haproxy - HAProxy 在一个后端提供多种健康检查类型
- php - 如何在 if 语句中回显 PHP 和 HTML
- python - Python - 同时运行函数(多实例)
- sparql - 如何向查询添加条件
- jquery - 如何制作返回某个视图的 Jquery 函数?(不是部分视图)
- shell - 在用户指定月份和日期后打印日历的 Shell 脚本
- vue.js - 将整个页面重定向到 vue.js 中的 text/html
- oracle - 将 Oracle 序列从 ORDER 更改为 NO ORDER 的影响
- css - 创建此类布局的最佳实践?
- sql - 从数据库中选择时避免脏读/幻读