react-native-image-picker launchCamera 在 android 中无法工作

问题描述 投票:0回答:4

我在 React Native 中使用

"react-native-image-picker": "^3.0.1"
来捕获图像。但我在 android 9 中打开相机时出现错误。

我遇到错误:

{"errorCode": "others", "errorMessage": "This library does not require Manifest.permission.CAMERA, if you add this permission in manifest then you have to obtain the same."}

这是我的代码

ImagePicker.launchCamera(
          {
            includeBase64: false,
            mediaType: 'photo',
            quality: 0.8,
          },
          async (response) => {
            if (response.didCancel) {
              console.log('User cancelled image picker');
            } else if (response.error) {
              console.log('ImagePicker Error: ', response.error);
            } else {
              
            }
          },
        );

android react-native android-camera react-native-image-picker
4个回答
22
投票

在捕获图像之前,请向用户询问“相机权限”。在 Android marshmallow 版本以上,您还应该请求 Run Time 权限,这称为危险权限。 const requestCameraPermission = async () => { try { const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.CAMERA, { title: "App Camera Permission", message:"App needs access to your camera ", buttonNeutral: "Ask Me Later", buttonNegative: "Cancel", buttonPositive: "OK" } ); if (granted === PermissionsAndroid.RESULTS.GRANTED) { console.log("Camera permission given"); } else { console.log("Camera permission denied"); } } catch (err) { console.warn(err); } };

然后,如果获得许可,则在 
if

内调用

ImagePicker.launchCamera



2
投票


1
投票

将选项添加到 android pp\src\main\AndroidManifest.xml -> 部分

application

- >参数android:requestLegacyExternalStorage =“true” android pp\src\main\AndroidManifest.xml

... <application ... android:requestLegacyExternalStorage="true" ...>



0
投票

将await添加到函数launchCamera
  • 添加 includeBase64: false
  • 添加参数 saveToPhotos: true
  • 添加媒体类型:'照片'
  • { 包括Base64:假, 保存到照片:正确, 媒体类型:'照片', 质量:0.5, }

await launchCamera( { includeBase64: false, saveToPhotos:true, mediaType: 'photo', quality: 0.5, }, (resp) => { try { if (resp.didCancel) { return; } if (!resp.assets) { return; } const assets = resp.assets[0]; const uri = assets.uri; if (uri) { const filename = `/${documento.code}.jpg`; saveFileStorage( readFileImagePath + phoneStorageDir + filename, uri, documento, ); } else { console.log('No hay una imagen valida'); } console.log(uri); } catch (error) { console.log(error) } }, );

© www.soinside.com 2019 - 2024. All rights reserved.