当权限被永久拒绝时,Flutter permission_handler 包未打开应用程序设置
Posted
技术标签:
【中文标题】当权限被永久拒绝时,Flutter permission_handler 包未打开应用程序设置【英文标题】:Flutter permission_handler package not opening app settings when permission is permanently denied 【发布时间】:2021-12-03 06:42:03 【问题描述】:一段时间以来一直在研究 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 不会打开应用程序设置页面,而是打开“设置”页面。
【问题讨论】:
【参考方案1】:替换 !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();
【讨论】:
问题是 openAppSettings() 没有打开应用程序设置,而是打开了 ios 设置页面。我在原始帖子中添加了更多上下文。以上是关于当权限被永久拒绝时,Flutter permission_handler 包未打开应用程序设置的主要内容,如果未能解决你的问题,请参考以下文章