RN使用第三方库实现选择照片或打开摄像头
1:新版本可能会报错
使用5.0.0版本
2:检查和询问用户是否授予权限
给这个文件增加uses-permission的这三行
3:申请权限的代码,注意区别android的版本
import {
View,
Text,
StyleSheet,
StatusBar,
Image,
Alert,
TextInput,
Modal,
Platform,
PermissionsAndroid
} from 'react-native';
// ....................................
async function requestCameraPermission() {
if (Platform.Version >= 31) {
// 如果运行的是 Android 12 或更高版本,选用新模型来请求相机权限
// const result = await requestPermissionAndroid12('android.permission.CAMERA');
// 请求本地存储权限
const result = await requestPermissionAndroid12('android.permission.READ_EXTERNAL_STORAGE')
if (result === PermissionsAndroid.RESULTS.GRANTED) {
console.log("加载权限")
// launchCamera(options, (res)=>{
// console.log("res",res)
// });
// 申请到权限之后打开图库
launchImageLibrary(options, ({assets})=>{
console.log("res",assets)
if(assets && assets[0].uri) {
setImage({uri:assets[0].uri})
}
});
console.log('Camera permission granted权限通过');
} else {
console.log('Camera permission denied权限拒绝');
}
} else {
// 如果运行的是 Android 11 或更低版本,使用之前的版本的权限请求模型来请求
try {
const granted = await PermissionsAndroid.request(
// PermissionsAndroid.PERMISSIONS.CAMERA,
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
{
title: 'App android.permission.READ_EXTERNAL_STORAGE Permission',
message: 'App needs access to android.permission.READ_EXTERNAL_STORAGE.',
buttonNeutral: 'Ask Me Later',
buttonNegative: 'Cancel',
buttonPositive: 'OK',
},
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log('Camera permission granted,11一下权限请求通过');
} else {
console.log('Camera permission denied,11一下权限请求失败');
}
} catch (err) {
console.warn(err);
}
}
}
async function requestPermissionAndroid12(permission:any) {
// 检查是否允许了相机权限android.permission.CAMERA
const isGranted = await PermissionsAndroid.check(permission);
if (isGranted) {
// 如果设置的应用权限管理中用户允许了,直接返回许可令
return PermissionsAndroid.RESULTS.GRANTED;
}
// 询问用户是否给权限,如果用户设置的是每次使用时询问
const result = await PermissionsAndroid.request(permission);
if (result === PermissionsAndroid.RESULTS.GRANTED) {
console.log("yunxu")
return PermissionsAndroid.RESULTS.GRANTED;
} else if (result === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN) {
throw new Error('Permission denied with never ask again');
} else {
throw new Error('Permission denied');
}
}
requestCameraPermission()