我遇到了问题:ACTION_IMAGE_CAPTURE Intent 的行为取决于硬件制造商。
我认为,从插入照片库的相机中获取照片的最佳方式必须如下所示
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, CAPTURE_IMAGE_REQUEST);
然后在onActivityResult
中获取uri:
switch (requestCode) {
case CAPTURE_IMAGE_REQUEST: {
if(resultCode == Activity.RESULT_OK) {
Uri uri = intent.getData();// content uri of photo in media gallery
//do something with this
}
break;
}
但我知道,这在很多设备上都不起作用;此外,我发现了几种不同的相机应用行为场景:
- 一些设备有bug由于此事件,因此无法获得全尺寸照片,只能使用公共(public)目录中的 tmp 文件获得 512px 宽的照片
- 一些设备(包括我的)将拍摄的照片插入图库,但不返回 Uri。 (getData() 返回 null,intent extras 只有 boolean 键“specify-data”,value = true)如果我尝试通过公共(public)临时文件获取照片,那么照片将同时插入到图库和临时文件中。
- 有些设备不会将拍摄的照片插入相册 - 我必须手动插入
- 我不知道,但可能还有其他不同的场景
那么,是否存在管理此类问题以涵盖广泛的设备和制造商的最佳实践?
在这种情况下,我需要从相机拍摄照片,将其插入图库,然后获取图库中照片的 uri。
最佳答案
部分已经回答:
检查 hasImageCaptureBug 的执行情况()
对于null问题,也许你可以watch over the Gallery folder ?
我认为您不应该检查其他情况。 Google 和 Android OEM 会监控这些问题,因此会报告它们并希望它们得到修复。
关于java - 使用 ACTION_IMAGE_CAPTURE 解决错误的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530743/