java - 使用 ACTION_IMAGE_CAPTURE 解决错误的好方法

标签 java android camera android-intent

我遇到了问题: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。

最佳答案

部分已经回答:

我认为您不应该检查其他情况。 Google 和 Android OEM 会监控这些问题,因此会报告它们并希望它们得到修复。

关于java - 使用 ACTION_IMAGE_CAPTURE 解决错误的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530743/

相关文章:

java - SecureRandom 问题 : PRNG not consistent in java 1. 5

java - Android 应用程序 TCP/IP 服务器在调用接受时崩溃

ios - 具有自定义菜单的Xamarin Forms Camera

url - 我们可以使用 Opencv 通过互联网获取实时视频流吗?怎么做?

java - Spring Boot Web 应用程序加载由另一个应用程序创建的新网页

java - 我需要为 taglib fmt :formatDate 添加日期翻译

java - 为 android 集成 Authorize.net API 的问题

java - 望远镜构造函数的设计模式或依赖注入(inject)

java - 替换并增加 Android 应用程序文件名中的数字

java - 相机预览很好,但前置相机产生的照片非常暗