2016-10-15 43 views
1

我从我的应用程序通过intent与参数MediaStore.EXTRA_OUTPUT.Camera开启相机活动开,但是当我backpress不点击图像我的应用程序crashes.I通过类似的问题去了,看见相机意图如果使用MediaStore.EXTRA_OUTPUT,则返回null。那么如何检查图像是否被点击? 这里是代码:
安卓相机意图处理backpress

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)的摄像头,可以在一些手机和崩溃其他mobiles.So我如何在这种情况下处理backpress运作良好。

+0

检查Activity.RESULT_CANCELED或Activity.RESULT_OK ...在后退按钮的情况下,您将获得Activity.RESULT_CANCELED –

+0

为什么在开始使用数据或文件之前没有检查onActivityResult中的RESULT_Ok?如果你没有捕获或什么也没做相机的意图总是返回以外,它保证将返回RESULT_OK之前开始提取数据之外的Result_cancel。 –

回答

0

当您设置一个MediaStore.EXTRA_OUTPUT标志,则data总是为空(在Android> = 5.0,我认为)。

来实现它的正确方法是保持其作为价值的标志MediaStore.EXTRA_OUTPUT密钥的文件的一个实例。

然后点击图片,然后得到一个RESULT_OK后,检查文件是否存在。

请注意:File对象可能是nullonActivityResult()之内。这是因为活动从相机活动返回时被重新创建。为了解决这个问题,你需要保存内onSaveInstanceState()文件到outState束的路径,并在onRestoreInstanceState()重新初始化。

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); 
     } 
    } 
} 

我希望这能帮到你。