我在 Android 11 设备上遇到了 React-native-image-picker 的问题,拍照后,应用程序不会响应按下勾号(复选标记)图标来接受图像。相机界面允许我取消相机或重新拍摄图像,没有任何问题,但按勾号接受并保存图像不会按预期进行。在运行低于 11 的 Android 版本的设备上不会出现此问题,其中图像选择器按预期工作。
这是我用来启动相机的代码片段:
const requestGalleryPermission = async () => {
try {
const permissions = [
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.CAMERA,
];
const granted = await PermissionsAndroid.requestMultiple(permissions);
const storageGranted = granted[PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE] === PermissionsAndroid.RESULTS.GRANTED;
const writeGranted = granted[PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE] === PermissionsAndroid.RESULTS.GRANTED;
const cameraGranted = granted[PermissionsAndroid.PERMISSIONS.CAMERA] === PermissionsAndroid.RESULTS.GRANTED;
if (storageGranted && cameraGranted && writeGranted) {
console.log('Both read storage and camera permissions granted');
return true;
} else {
console.log('Read storage or camera permission denied');
return false;
}
} catch (err) {
console.warn('Permission request error:', err);
return false;
}
};
export const handleCameraLaunch = async (launchCameraEvent) => {
const options = {
mediaType: 'photo',
includeBase64: true,
maxHeight: 2000,
maxWidth: 2000,
};
const permission = requestGalleryPermission();
if (permission) {
await launchCamera(options, response => {
if (response.didCancel) {
console.log('User cancelled camera');
} else if (response.error) {
console.log('Camera Error: ', response.error);
} else {
console.log('Taking photo');
launchCameraEvent(response);
}
});
}
};
我已确保授予所有必要的权限,并且 AndroidManifest.xml 包含 CAMERA 和 READ_EXTERNAL_STORAGE 的权限,并添加 android:requestLegacyExternalStorage="true"。我的目标是 API 级别 30 (Android 11),并已在多个设备上进行了测试。该问题似乎在 Android 11 上仍然存在。
我在网上发现了重写 onActivityResult 作为潜在修复方法的建议,但不确定如何在 React Native 上下文中继续执行该操作,或者这是否是正确的方法。
有人遇到过类似的问题或可以提供有关如何解决此问题的见解吗?任何帮助或指导将不胜感激。
这个问题解决了吗?存在一个问题,即如果拍摄照片,则单击勾号后不会发生任何情况。取消效果很好。