【问题标题】:How to use Intent(MediaStore.ACTION_IMAGE_CAPTURE) and get GPS data in the picture?如何使用 Intent(MediaStore.ACTION_IMAGE_CAPTURE) 获取图片中的 GPS 数据?
【发布时间】:2016-12-18 07:46:31
【问题描述】:

有没有办法使用 Intent(MediaStore.ACTION_IMAGE_CAPTURE) 和相机应用程序拍摄照片,该应用程序已在 Exif 数据中设置 GPS 位置?

我的应用请求

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

在清单中也

ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION)
ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)

在代码中,但我收到的照片不包含位置数据。当我直接用相机拍照时,照片中会显示位置信息。

编辑:我忘了补充说我正在使用 Nexus 6P 来测试它,当我使用附带的相机应用程序 (3.2.045) 进行 ACTION_IMAGE_CAPTURE 意图时,我在系统托盘中看到了“定位销”在显示相机取景器之前的第二秒。这使我相信可能缺少一个设置或参数,可以在图片文件中写入位置信息。

【问题讨论】:

    标签: android gps photo


    【解决方案1】:

    首先,没有单一的“库存相机应用”。有数千种 Android 设备型号。他们将附带数百种不同的“库存相机应用程序”实现,因为大多数设备制造商都会创建自己的(并且,就三星而言,他们的舰队中有许多这样的相机应用程序)。另外ACTION_IMAGE_CAPTURE 不一定会使用“股票相机应用程序”。相反,它使用用户想要的任何东西,可能是从 Play 商店或其他地方安装的第三方相机应用程序。

    您的应用无法请求相机应用将 EXIF 位置数据添加到照片中,相机应用也不需要包含 EXIF 位置数据。我对你看到的结果一点也不惊讶。

    欢迎您自己获取位置数据,如果需要,可以使用 an EXIF library 将该数据添加到照片中。

    【讨论】:

    • 感谢您的快速回答。我知道“没有单一的相机应用程序”。我忘了补充说我正在使用 Nexus 6P,当我启动图像捕捉意图时,在显示取景器之前,我会在系统托盘中看到“定位销”一秒钟。这让我想到,也许这个特定的应用程序正在捕获位置数据,但由于缺少某些设置而未将其包含在最终文件中。
    • @MatthiasSchippling:我无法评论为什么该应用会短暂请求该位置,然后不将其包含在 EXIF 输出中。但是,没有额外的内容可以包含“请将位置数据放入 EXIF 标头”。即使有,也不需要相机应用程序来兑现这些额外的东西。您可能会偷看照片的 EXIF 标头,看看您是否有位置,然后根据需要处理丢失的位置(忽略它,获取位置并自己添加,等等)。
    • 这就是我的假设,我只是想确保我没有忽略某些东西。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多