优雅地解决使用 ACTION_IMAGE_CAPTURE 拍照产生的 bug

5
我遇到了一个问题:ACTION_IMAGE_CAPTURE 意图的行为取决于硬件制造商。
我认为,从相机中获取照片并插入照片库的最佳方法应该是以下内容:
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;
    }

但是我发现这在许多设备上都无法正常工作;此外,我发现相机应用程序的行为有几种不同的情况:

  • 一些设备存在错误,因此无法获取全尺寸照片,只能使用公共目录中的临时文件获取512像素宽的照片。
  • 一些设备(包括我的设备)将拍摄的照片插入到图库中,但不返回Uri。(getData()返回null,意图附加项仅具有布尔键“specify-data”,值为true)如果我尝试通过公共临时文件获取照片,那么照片将被插入到图库和临时文件中。
  • 一些设备不会将拍摄的照片插入到图库中-我必须手动执行此操作。
  • 我不知道,但可能存在其他不同的情况。

那么,在管理此类问题时是否有最佳实践可以涵盖各种设备和制造商?

在这种情况下,我需要从相机拍摄照片,将其插入到图库中,然后获取图库中照片的uri。

1个回答

0

这个问题的一部分已经得到了回答:

我认为你不应该检查其他情况。Google和Android OEM会监控这些问题,所以报告它们,希望它们能被修复。


1
@muzhig 大部分的漏洞都已经修复了,但是运营商不允许原始设备制造商推出升级。 - Reno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接