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

Joh*_*ggs 5 null android 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);}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我非常感谢你对这个有任何帮助!

Com*_*are 6

Uri imageUri = data.getData(); //The trouble is here
Run Code Online (Sandbox Code Playgroud)

有一个摄像头应用程序来一回没有要求Uri指向照片,因为这不是一部分ACTION_IMAGE_CAPTURE Intent协议。任何一个:

  • 供应EXTRA_OUTPUT在你的ACTION_IMAGE_CAPTURE Intent,在这种情况下,你知道哪里有图像应被存储,并且不需要依赖getData(),或

  • data在响应中使用额外的Intent,这将是Bitmap图像的缩略图

你的下一个错误在这里:

String realPath = Image.getPath(this, imageUri);
Run Code Online (Sandbox Code Playgroud)

不需要将图像存储为您可以访问的文件,除非您通过EXTRA_OUTPUT.