1. Android
路径:android/app/src/main/AndroidManifest.xml;
在<manifest> 的 <application> 外面,加上
<uses-permission android:name="android.permission.CAMERA" /><!-- 打开摄像头权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 如果你有保存文件需求 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 如果你有读取文件需求 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 如果你有录视频需求 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 访问相册 -->
<uses-pesrmission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 保存照片 -->
在代码里动态申请权限, Android 6.0(API 23)以后,即使 AndroidManifest.xml 里声明了,也要动态申请权限。permission_handler: ^11.0.1,在你打开摄像头前加上_requestCameraPermission
import 'package:permission_handler/permission_handler.dart';
Future<void> _requestCameraPermission() async {
var status = await Permission.camera.status;
if (!status.isGranted) {
status = await Permission.camera.request();
if (!status.isGranted) {
// 用户拒绝了,可以弹提示
print("摄像头权限被拒绝了");
return;
}
}
// 权限通过了,可以继续打开摄像头
}
2. IOS
路径:ios/Runner/Info.plist
<string>我们需要使用您的摄像头来拍照</string>
<key>NSMicrophoneUsageDescription</key>
<string>我们需要使用您的麦克风来录制视频</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>我们需要访问您的相册来选择照片</string>
iOS 通常自动弹窗,不需要手动请求, 只要 Info.plist 写了,iOS 在第一次用摄像头的时候会自动弹窗问用户。