我的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();
}
}
非常感谢您对此提供的任何帮助!
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
提供到该位置的路径,否则不要求将图像存储为可以访问的文件。
if(resultCode == RESULT_OK){
String realPath = Image.getPath(this, imageUri);