对于某些手机,Android data.getData()会从CameraActivity返回null

时间:2015-09-04 17:07:33

标签: android null uri

我的onActivityResult从相机活动回来时发生致命错误。让我感到头疼的是,错误只发生在少数手机上(基于受影响的用户数量),而大多数人似乎没有任何问题。我可以在我的Nexus 6(运行Lollipop 5.1.1)上复制错误,而我的Note 5(也是5.1.1)完全没有问题。

问题是当我尝试从data.getData()分配imageUri时。在Note 5上进行调试,data.mData等于" content:// media / external / images / media / 2215"在Nexus 6上,data.mData为null。

我知道这是一个常见的问题但是到目前为止我还没有找到任何帮助我的东西。任何人都可以指出我的解决方案并提供答案吗?

方法启动结果的相机活动

@OnClick(R.id.change_image_camera) public void takePicture(){
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);}

onActvityResult

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

    if (resultCode == Activity.RESULT_OK) {

        Uri imageUri = data.getData(); //The trouble is here

        String realPath = Image.getPath(this, imageUri); //getPath crashes because imageUri is null

        Image.compressImage(realPath);

        File file = new File(realPath);

        Bundle extra = new Bundle();
        extra.putString("URL", realPath);
        returnIntent.putExtras(extra);

        setResult(RESULT_OK, returnIntent);
        finish();
    }
}

我非常感谢有关这方面的任何帮助!

2 个答案:

答案 0 :(得分:4)

Uri imageUri = data.getData(); //The trouble is here

相机应用无需返回指向照片的Uri,因为它不属于the ACTION_IMAGE_CAPTURE Intent protocol。之一:

  • EXTRA_OUTPUT ACTION_IMAGE_CAPTURE中提供Intent,在这种情况下,您知道应该存储图片的位置,而不需要依赖getData(),或

  • 在回复data中使用Intent额外费用,该回复将是图片缩略图的Bitmap

你的下一个错误就在这里:

String realPath = Image.getPath(this, imageUri);

除非您通过EXTRA_OUTPUT提供指向该位置的路径,否则不要求将图像存储为您可以访问的文件。

答案 1 :(得分:0)

if(resultCode == RESULT_OK){

                Bitmap bitmap = (Bitmap) imageReturnedIntent.getExtras().get("data");
                imageView.setImageBitmap(bitmap);
            }