Tan*_*nuj 5 flutter flutter-ios
在此处实现了相机包中的示例:
https://pub.dev/packages/camera/example
在物理设备(运行 iOS 16)上进行测试时,该应用程序构建并运行良好,但手机不要求任何访问摄像头或麦克风的权限。
以下代码已添加到ios/Runner/Info.plist
<key>NSCameraUsageDescription</key>
<string>Testing the Camera integration.</string>
<key>NSMicrophoneUsageDescription</key>
<string>To add sounds to the videos you record.</string>
Run Code Online (Sandbox Code Playgroud)
已iOS Deployment Target设置为iOS 11.0
注意:我可以向您保证该应用程序尚未被授予这些权限,因为:
我错过了什么吗?
更新:
创建了一个干净的项目来测试此示例代码,实现了permission_handler来强制权限(基于@cenk-yagmur的建议)。
现在出现权限窗口,但是示例代码仍然不起作用。
这让我相信它是:
我更倾向于 2。将进行自定义集成并测试是否可以解决问题。
您可以将此代码添加到 PodFile 中并重试。
不要忘记 clean、pub get 和 pod install。
请记住,只需关闭您正在使用的属性的注释行并将值设置为 1。
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=1',
## dart: PermissionGroup.reminders
#'PERMISSION_REMINDERS=0',
## dart: PermissionGroup.contacts
# 'PERMISSION_CONTACTS=0',
## dart: PermissionGroup.camera
'PERMISSION_CAMERA=1',
## dart: PermissionGroup.microphone
'PERMISSION_MICROPHONE=1',
## dart: PermissionGroup.speech
#'PERMISSION_SPEECH_RECOGNIZER=0'
## dart: PermissionGroup.photos
'PERMISSION_PHOTOS=1',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1',
## dart: PermissionGroup.notification
'PERMISSION_NOTIFICATIONS=1',
## dart: PermissionGroup.appTrackingTransparency
##'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
## dart: PermissionGroup.mediaLibrary
##'PERMISSION_MEDIA_LIBRARY=1'
## dart: PermissionGroup.sensors
#'PERMISSION_SENSORS=0'
]
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的照片和相机权限功能代码:
Future<bool?> _checkPermission(BuildContext context) async {
if (Platform.isAndroid) {
Map<Permission, PermissionStatus> statues = await [Permission.camera, Permission.photos].request();
PermissionStatus? statusCamera = statues[Permission.camera];
PermissionStatus? statusPhotos = statues[Permission.photos];
bool isGranted = statusCamera == PermissionStatus.granted && statusPhotos == PermissionStatus.granted;
if (isGranted) {
return true;
}
bool isPermanentlyDenied = statusCamera == PermissionStatus.permanentlyDenied || statusPhotos == PermissionStatus.permanentlyDenied;
if (isPermanentlyDenied) {
return false;
}
} else {
Map<Permission, PermissionStatus> statues = await [Permission.camera, Permission.storage, Permission.photos].request();
PermissionStatus? statusCamera = statues[Permission.camera];
PermissionStatus? statusStorage = statues[Permission.storage];
PermissionStatus? statusPhotos = statues[Permission.photos];
bool isGranted = statusCamera == PermissionStatus.granted && statusStorage == PermissionStatus.granted && statusPhotos == PermissionStatus.granted;
if (isGranted) {
return true;
}
bool isPermanentlyDenied = statusCamera == PermissionStatus.permanentlyDenied || statusStorage == PermissionStatus.permanentlyDenied || statusPhotos == PermissionStatus.permanentlyDenied;
if (isPermanentlyDenied) {
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)