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

关于在Expo/React Native中调用设备原生相机应用的问题

关于在Expo/React Native中调用设备原生相机应用的问题

看起来你踩的这个坑我之前帮好几个开发者排查过!核心问题就是你代码里硬编码了一加的相机包名com.oplus.camera——这在Expo Go里能凑合用(刚好你测试机是一加),但打包成开发构建或者APK之后就不行了,原因有两个:一是其他品牌的手机根本没有这个包名的相机应用,二是安卓11及以上的包可见性政策会限制你访问未声明的第三方App,再加上Expo构建时的权限配置没跟上,自然就打不开了。

给你几个靠谱的解决办法:

  • 别再硬编码特定厂商的包名了!用通用的方式唤起系统默认相机,比如用Expo官方的expo-intent-launcher,它能自动适配所有安卓品牌的相机,代码示例如下:
    import { IntentLauncherAndroid } from 'expo-intent-launcher';
    
    const openSystemCamera = async () => {
      try {
        // 发送拍照Intent,系统会唤起默认相机应用
        await IntentLauncherAndroid.startActivityAsync(
          IntentLauncherAndroid.ACTION_IMAGE_CAPTURE
        );
      } catch (error) {
        console.log('打开相机失败:', error);
      }
    };
    
  • 补全权限配置:在你的app.json里必须加上相机相关的权限声明,不然Expo构建时会把相机访问权限给屏蔽掉,示例配置:
    {
      "expo": {
        "android": {
          "permissions": [
            "CAMERA",
            "WRITE_EXTERNAL_STORAGE"
          ]
        }
      }
    }
    
  • 如果实在坚持要用Linking的方式,那得在app.json里声明你要访问的相机包名(但还是不推荐,太局限),比如安卓11+需要配置包可见性:
    {
      "expo": {
        "android": {
          "packageVisibility": [
            "com.oplus.camera",
            // 还要加上其他你想适配的厂商相机包名,比如小米、三星的
            "com.miui.camera",
            "com.sec.android.app.camera"
          ]
        }
      }
    }
    

总结下,最省心的就是用expo-intent-launcher的通用Intent方式,不用管各个厂商的包名,还能在Expo构建和APK里正常工作。

备注:内容来源于stack exchange,提问作者Vaibhav Srivastava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:10:27