在要求图片时,活动结果始终返回null

时间:2017-11-02 19:00:58

标签: java android android-intent null

我试图在一个意图中从相机或画廊(无论用户选择什么)获取图像。问题是我总是在intent.getData()中将OnActivityResult视为空。 我按照建议here执行以下操作:

Intent pickIntent = new Intent();
pickIntent.setType("image/*");
pickIntent.setAction(Intent.ACTION_GET_CONTENT);
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String pickTitle = "Select or take a new Picture"; // Or get from strings.xml
Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { takePhotoIntent });

startActivityForResult(chooserIntent, SELECT_PICTURE);

OnActivityResult:

if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) {
        if (data != null) {
            try {
                final Uri imageUri = data.getData();
                Log.e("uri", imageUri + "");

uri为空

1 个答案:

答案 0 :(得分:0)

好吧,ACTION_IMAGE_CAPTURE不会返回Uri。 但是,如果你真的想通过使用它来拍照后获得Uri,那么你需要指定图片的路径(它会将照片保存在该路径上,所以这不是暂时的)。

这是其中一个示例(这将创建目录并为您的图像准备新文件):

// Determine Uri of camera image to save.
    File root = new File(
            Environment.getExternalStorageDirectory() + File.separator + locationName + File.separator);
    root.mkdirs();
    String fname                = imagePrefixName + System.currentTimeMillis() + ".jpg";
    File   imageMainDirectory = new File(root, fname);
    Uri    outputFileUri        = Uri.fromFile(imageMainDirectory); //make sure you store this in the place that can be accessed from your onActivityResult

在您决定输出后&存储它,然后你需要在你的相机上实现这样的uri:

takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

然后,当您收到数据时,您可以执行此操作以检查图片是来自图库还是相机(存储的图片上有Uri):

final Uri imageUri = data.getData();
if (imageUri == null)
{
   imageUri = outputFileUri;
}

确保您实现了写&的权限。读外部存储&有了这个,我想你会得到你想要的Uri。