我在 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 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
将选项添加到 android pp\src\main\AndroidManifest.xml -> 部分
application- >参数android:requestLegacyExternalStorage =“true” android pp\src\main\AndroidManifest.xml
...
<application
...
android:requestLegacyExternalStorage="true"
...>
将await添加到函数launchCamera
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)
}
},
);