【问题标题】:implementing camera native module in react native在 react native 中实现相机原生模块
【发布时间】:2020-09-08 11:25:28
【问题描述】:

由于某些原因,我不应该在我的应用程序中使用 android.permission.CAMERA。所以我不能使用 react-native-image-picker 库。因此我正在实现一个相机原生模块以便拍照并将它们发送到服务器,因为我是初级 RN 开发人员。我在模块类中用于启动意图的代码如下:

class CameraModule extends ReactContextBaseJavaModule {
    static final int REQUEST_IMAGE_CAPTURE = 1;

    Activity activity;

    CameraModule(ReactApplicationContext reactContext) {
        super(reactContext);
        this.activity=activity;
    }

    @Override
    public String getName() {
        return "Camera";
    }

    @ReactMethod
    public void onClick() {
           ReactApplicationContext context = getReactApplicationContext();     
            Context context;
            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            if(cameraIntent.resolveActivity(context.getPackageManager()) !=null) {
                activity.startActivityForResult(cameraIntent,REQUEST_IMAGE_CAPTURE); 
            }         
        }

            
    }

在此之后,我必须为 onActivityResult 编写代码才能获得最终图像。但在这个级别我得到了错误

尝试在空对象引用上调用虚拟方法“void android.app.Activity.startActivityForResult(android.content.Intent,int)”

有什么想法吗?

【问题讨论】:

    标签: java android react-native react-native-android


    【解决方案1】:

    这段代码应该可以工作。但是有点剧透,如果您不请求权限,它将无法正常工作。

    
    class CameraModule extends ReactContextBaseJavaModule {
        static final int REQUEST_IMAGE_CAPTURE = 1;
    
        Activity activity;
    
        CameraModule(ReactApplicationContext reactContext) {
            super(reactContext);
            this.activity=reactContext.getCurrentActivity();
        }
    
        @Override
        public String getName() {
            return "Camera";
        }
    
        @ReactMethod
        public void onClick() {
               ReactApplicationContext context = getReactApplicationContext();     
                Context context;
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                cameraIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                if(cameraIntent.resolveActivity(context.getPackageManager()) !=null) {
                    
                  activity.startActivityForResult(cameraIntent,REQUEST_IMAGE_CAPTURE); 
                }         
            }
    
                
        }
    

    【讨论】:

      【解决方案2】:

      问题解决了! 我刚刚替换了这部分:

      activity.startActivityForResult(cameraIntent,REQUEST_IMAGE_CAPTURE)
      

      有了这个:

      takePictureIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                      context.startActivity(takePictureIntent);
      

      【讨论】:

        猜你喜欢
        • 2015-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        相关资源
        最近更新 更多