三星Galaxy S9(Android9)上ExponentImagePicker.launchCameraAsync调用失败求助
问题:三星Galaxy S9(Android 9)调用Expo ImagePicker相机报错
在三星Galaxy S9(Android 9)真机上调用ExponentImagePicker.launchCameraAsync时出现以下错误:
Error: Call to function 'ExponentImagePicker.launchCameraAsync' has been rejected. Caused by: kotlin.UninitializedPropertyAccessException: lateinit property cameraLauncher has not been initialized
Android 9及更高版本模拟器运行正常,该功能在更新React Native及相关库后出现异常。
相关代码
import * as ImagePicker from 'expo-image-picker'; const MediaSelector: React.FC<Props> = (props) => { const open = async () => { const permissions = await ImagePicker.requestCameraPermissionsAsync(); if (!permissions.granted) return Alert.alert("permission denied!") const config: ImagePicker.ImagePickerOptions = { mediaTypes: ImagePicker.MediaTypeOptions.Images, allowsEditing: true, allowsMultipleSelection: false, exif: false, aspect: [1, 1], } try { const result = await ImagePicker.launchCameraAsync(config); } catch (error) { console.log(error) Alert.alert("error!") return } } return <Pressable style={styles.container} onPress={open}> <ImageView img={props.image}/> </Pressable> }
版本信息
"react": "18.0.0", "expo-image-picker": "~13.3.1", "react-native": "0.69.6",
解决办法
- 降级
expo-image-picker版本:该版本在Android 9真机上存在初始化兼容性问题,可尝试降级至同SDK版本下的稳定版,比如~13.1.1或~13.2.0。修改package.json后执行npm install或yarn install,清理项目缓存后重新打包。 - 提前触发相机相关初始化:在组件挂载时,通过
useEffect提前获取相机权限或触发轻量初始化操作,避免调用launchCameraAsync时实例未初始化。示例:useEffect(() => { // 提前触发权限检查或初始化 ImagePicker.getCameraPermissionsAsync(); }, []); - 确认Android权限配置:确保
AndroidManifest.xml中已正确添加相机及存储权限:<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - 清理项目构建缓存:执行
./gradlew clean(Android),清理Expo缓存expo r -c,重新构建项目。
内容的提问来源于stack exchange,提问作者Simen Russnes
相关产品推荐
相关产品推荐

