【发布时间】:2016-03-31 04:24:36
【问题描述】:
我正在开发 android 应用程序,我的应用程序有按钮来拍照。之前我陷入了拍照后onActivityResult返回数据为null的状态。这是相机预期的行为,如果我们将 EXTRA_OUTPUT 放入 intent 中,它将返回 null。出于这个原因,我做了空检查代码,它运行良好。
几天后又一次,我测试了。我仍然再次陷入同样的问题。但是这次data 不是null。 data 具有空意图,例如 intent 和 data.getData() 变为 null。我通过检查 data.getData() == null 解决了这个问题,它再次工作。我不明白为什么会这样。只是好奇发生了什么。出于这个原因,我必须再次重新上传到生产环境。 :-(
//camera intent
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra("requestCode", Constants.REQUEST_IMAGE_CAPTURE);
Intent chooseImageIntent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
chooseImageIntent.setType("image/* video/*");
chooseImageIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
chooseImageIntent.putExtra("requestCode", Constants.REQUEST_CHOOSE_FROM);
//app can use camera
if (takePictureIntent.resolveActivity(mContext.getPackageManager()) != null) {
//add output file path which camera will save image to
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Helpers.getOutputMediaFileUri());
//create choose
Intent chooser = Intent.createChooser(chooseImageIntent, "Select From");
//add take camera intent as first intent
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS,new Intent[]{takePictureIntent});
//open up dialog
((Activity) mContext).startActivityForResult(chooser, Constants.REQUEST_CHOOSE_FROM);
} else {
((Activity) mContext).startActivityForResult(chooseImageIntent, Constants.REQUEST_IMAGE_GALLERY);
}
已编辑
我知道如何解决问题。我不明白的是,如果我输入 EXTRA_OUTPUT,则返回 data 必须是 null。最重要的是我几周前实现的代码,我很确定data 返回null,突然它又不是null 值了。
【问题讨论】:
-
不要使用
data.getData(),而是使用data.getExtras().get("data");,看看问题是否再次出现。 -
我不使用
data.getExtras()的原因是因为如果我在intent 中传递extra_output,data变成null。如果我没记错,那就是事实
标签: android android-intent camera