Android:处理相机意图的背压

时间:2016-10-15 08:42:22

标签: android android-intent android-camera

我通过参数MediaStore.EXTRA_OUTPUT.Camera打开我的应用程序从我的应用程序打开相机活动,但是当我没有点击图像我没有点击我的应用程序崩溃。我经历了类似的问题,发现当MediaStore.EXTRA_OUTPUT是相机时,相机意图返回null used.So我如何检查图像是否被点击? 这是代码:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri camCapfileUri = Uri.fromFile(new File(camCaptureImageName));
intent.putExtra(MediaStore.EXTRA_OUTPUT, camCapfileUri);
activity.startActivityForResult(intent, reqCode);

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //Changes camera on backpressed with data null checked
    if (requestCode == REQUEST_CAMERA) {
        onCaptureImageResult();
    } else if (requestCode == PICK_FROM_GALLERY && data.getData() != null) {
        onSelectFromGalleryResult(data);
    }
}

当我检查(数据!= null)相机时,它在某些手机中运行良好,并在其他手机中崩溃。那么在这种情况下如何处理背压。

2 个答案:

答案 0 :(得分:0)

当您设置MediaStore.EXTRA_OUTPUT标记时,data 总是为空(我认为Android> = 5.0)。

实现它的正确方法是维护File的一个实例,该实例用作标志中MediaStore.EXTRA_OUTPUT键的值。

然后在单击图像并获得RESULT_OK后,检查文件是否存在。

请注意:File对象可能在nullonActivityResult()。这是因为从Camera Activity返回时重新创建了Activity。要解决此问题,您需要将文件的路径保存到onSaveInstanceState()中的outState Bundle,并在onRestoreInstanceState()内重新初始化。

答案 1 :(得分:0)

我不确定我是否正确理解您的问题,但您可以检查结果是否正常。我稍微修改了你的代码。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri camCapfileUri = Uri.fromFile(new File(camCaptureImageName));
intent.putExtra(MediaStore.EXTRA_OUTPUT, camCapfileUri);
activity.startActivityForResult(intent, reqCode);

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //Changes camera on backpressed with data null checked
    // if user press back result will not be RESULT_OK
   if(resultCode == Activity.RESULT_OK){ 
      if (requestCode == REQUEST_CAMERA) {
         onCaptureImageResult();
      } else if (requestCode == PICK_FROM_GALLERY && data.getData() != null) {
        onSelectFromGalleryResult(data);
      }
   }
}

我希望这会帮助你。