[android]在 Nexus S 和三星 Galaxy S I9000 ACTION_IMAGE_CAPTURE 定位问题

发布时间: 2017/3/15 22:39:58
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想拍 picture 并将它存储到内部存储通过使用下面的代码︰

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
takenPhoto = new File(uploadsFolder, getNewPicFileName());
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(takenPhoto));
startActivityForResult(intent, SHOOT_MEDIA_REQUEST_CODE);

问题是,Nexus S 和 Galaxy S 设备默认和 ACTION_IMAGE_CAPTURE 的单方向 intent 是景观。如果我拍 picture 在肖像模式, picture 存储到旋转的"takenPhoto"文件。

这个问题似乎出现仅在三星 Galaxy S 设备 (Galaxy S 和 Nexus S),我试图使取决于图像射击方向自动旋转的另一个设备。

我将非常感谢在这个问题上的任何帮助。

解决方法 1:

从所知,这因为 MediaStore.Images.ImageColumns.ORIENTATION 这不正在设置值 Intent 。它并获取或设置当事情来通过普通 camera 应用程序。

上我的 Nexus S,然而,该文件仍然获取正确的 EXIF 数据。所以你可以像这样的定位︰

ExifInterface exif = new ExifInterface("filepath");
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                     ExifInterface.ORIENTATION_NORMAL);

然后你可以使用ContentResolver.update添加正确的定位数据。你只需要转换 ExifInterface 方向选项到旋转度数。

你另一个选择是要创建您自己 Activity 操作 camera 硬件和记录文件。您然后将跟踪的旋转和保存捕获的图像时将值写入元数据。由于 Camera 的应用程序是部分的 Android ,你大概可以复制并修改它没有太多的痛苦。

官方微信
官方QQ群
31647020