2015-09-04 103 views
4

我的摄像机活动返回的onActivityResult中发生了致命错误。我挠挠脑袋的是,错误只发生在少数手机上(基于受影响的用户数量),而大多数人似乎没有错。我可以在我的Nexus 6(运行Lollipop 5.1.1)上复制错误,而我的Note 5(也是5.1.1)完全没有问题。Android data.getData()从CameraActivity为某些手机返回null

问题是当我试图从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(); 
    } 
} 

我非常感谢在这一个任何帮助!

回答

4
Uri imageUri = data.getData(); //The trouble is here 

有一个摄像头应用到Uri指向返回照片没有要求,因为这是不是the ACTION_IMAGE_CAPTUREIntent protocol一部分。或者:

  • 供应EXTRA_OUTPUTACTION_IMAGE_CAPTUREIntent,在这种情况下,你知道哪里有图像应存储,并且不需要依靠getData(),或

  • 使用data额外的响应Intent,这将是图像

你的下一个错误的缩略图的Bitmap是在这里:

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

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

+0

感谢您的快速回复。我根据你的建议提供了EXTRA_OUTPUT,并完全避免了这些问题 –

+0

@JohnRiggs:请注意,偶尔会出现一些错误的相机应用程序,它们都会忽略'EXTRA_OUTPUT' * *和*不会返回'Uri'。除了检测你没有得到你的照片并告诉用户获得一个真正的照相机应用程序,你可以做的不多。 :-) – CommonsWare

相关问题