我创建了一个类来请求许可,它可以立即登录,它显示在Android上,但在iOs上,我没有看到任何许可授予。
class PermissionService {
Future permissionHandler() async {
await Permission.contacts.shouldShowRequestRationale;
if (await Permission.contacts.request().isGranted) {
// Either the permission was already granted before or the user just granted it.
}
Map<Permission, PermissionStatus> statuses = await [
Permission.locationWhenInUse,
Permission.locationAlways,
Permission.photos,
Permission.camera,
Permission.location,
Permission.microphone,
Permission.notification,
].request();
if (statuses[Permission.location].isDenied) {
print("Location permission is denied.");
}
if (statuses[Permission.camera].isDenied) {
print("Camera permission is denied.");
}
if (statuses[Permission.photos].isDenied) {
print("Photos permission is denied.");
}
if (statuses[Permission.notification].isDenied) {
print("Notification permission is denied.");
}
if (statuses[Permission.microphone].isDenied) {
print("Microphone permission is denied.");
}
if (statuses[Permission.locationWhenInUse].isDenied) {
print("locationWhenInUse permission is denied.");
}
if (statuses[Permission.locationAlways].isDenied) {
print("locationAlways permission is denied.");
}
}
}
我在Login.dart的初始状态中调用这个函数
发布于 2021-07-31 08:22:53
permission_handler包在8.0.0
版本中引入了一个突破性的更改,参见变化量g。默认情况下,iOS上的权限是禁用的,并且您的GCC_PREPROCESSOR_DEFINITIONS
文件中设置了正确的GCC_PREPROCESSOR_DEFINITIONS
。这里可以找到一个示例Podfile,但基本上您必须将其添加到Podfile中,设置不用于0
的权限
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
# You can remove unused permissions here
# for more infomation: https://github.com/BaseflowIT/flutter-permission-handler/blob/master/permission_handler/ios/Classes/PermissionHandlerEnums.h
# e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.calendar
'PERMISSION_EVENTS=1',
## dart: PermissionGroup.reminders
'PERMISSION_REMINDERS=1',
## dart: PermissionGroup.contacts
'PERMISSION_CONTACTS=1',
## dart: PermissionGroup.camera
'PERMISSION_CAMERA=1',
## dart: PermissionGroup.microphone
'PERMISSION_MICROPHONE=1',
## dart: PermissionGroup.speech
'PERMISSION_SPEECH_RECOGNIZER=1',
## dart: PermissionGroup.photos
'PERMISSION_PHOTOS=1',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1',
## dart: PermissionGroup.notification
'PERMISSION_NOTIFICATIONS=1',
## dart: PermissionGroup.mediaLibrary
'PERMISSION_MEDIA_LIBRARY=1',
## dart: PermissionGroup.sensors
'PERMISSION_SENSORS=1',
## dart: PermissionGroup.bluetooth
'PERMISSION_BLUETOOTH=1',
## dart: PermissionGroup.appTrackingTransparency
'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
## dart: PermissionGroup.criticalAlerts
'PERMISSION_CRITICAL_ALERTS=1',
]
end
end
end
编辑1:一旦完成,保存您的Podfile,然后停止项目的当前实例,因为热重新启动不会反映更改。重新构建项目,permission_handler
请求现在应该能够很好地工作。
编辑2:正如@YugankaSharan所建议的,要使更改生效,可能需要运行pod install
。
发布于 2022-10-17 03:24:06
在我的例子中,我也使用这个库。但问题不在于图书馆。这个应用程序甚至没有显示一个询问位置权限的对话框。然后我进入设置,转到应用程序,而我没有看到请求的位置权限界面。
问题在于我的Info.plist
文件。
<key>NSLocationAlwaysUsageDescription</key>
<string>Cho phép Chat truy cập thông tin vị trí để chia sẻ vị trí trong cuộc trò chuyện</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Cho phép Chat truy cập thông tin vị trí để chia sẻ vị trí trong cuộc trò chuyện</string>
权限NSLocationAlwaysUsageDescription
高于NSLocationWhenInUseUsageDescription
是错误的。因此,应该颠倒顺序。
https://stackoverflow.com/questions/68599765
复制相似问题