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

前端之家收集整理的这篇文章主要介绍了对于某些手机,Android data.getData()从CameraActivity返回null前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我的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();
    }
}

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

最佳答案
Uri imageUri = data.getData(); //The trouble is here

没有要求相机应用程序返回指向照片的Uri,因为这不是the ACTION_IMAGE_CAPTURE Intent protocol的一部分.要么:

>在ACTION_IMAGE_CAPTURE Intent中提供EXTRA_OUTPUT,在这种情况下,您知道应该存储图像的位置,并且不需要依赖getData(),或者
>在响应Intent中使用extra extra,它将是图像缩略图的Bitmap

你的下一个错误是:

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

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

猜你在找的Android相关文章