[Android data.getData()从某些手机的CameraActivity返回null

问题描述 投票:5回答:2

我的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。

我知道这是一个关于SO的常见问题,但到目前为止,我还没有发现任何对我有帮助的东西。谁能指出我的解决方案并提供答案?

为结果启动相机活动的方法

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

非常感谢您对此提供的任何帮助!

android null uri
2个回答
4
投票
Uri imageUri = data.getData(); //The trouble is here

[相机应用程序不需要返回指向照片的Uri,因为它不属于the ACTION_IMAGE_CAPTURE Intent protocol。要么:

  • ACTION_IMAGE_CAPTURE Intent中提供EXTRA_OUTPUT,在这种情况下,您知道应该将图像存储在哪里,而不需要依赖ACTION_IMAGE_CAPTURE,或者

  • 在响应Intent中使用getData()附加项,它将是图像缩略图的data

您的下一个错误在这里:

Intent

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


0
投票

if(resultCode == RESULT_OK){

String realPath = Image.getPath(this, imageUri);
© www.soinside.com 2019 - 2024. All rights reserved.