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()