You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

三星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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:30:51