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