对于某些手机,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提供指向该位置的路径,否则不要求将图像存储为您可以访问的文件.

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...