3

我正在尝试从我的 Android 应用程序中的图像媒体中提取位置坐标,但即使图像媒体包含这些详细信息,ExifInterface 也会提供空值。我曾尝试过 Android 9、10 和 11 操作系统模拟器和设备。

我正在使用android-image-picker库在我的应用程序中提供图像选择。我相信这与这个图像库无关。

我还要求ACCESS_MEDIA_LOCATION用于 Android 10 及更高版本的设备,如此所述。我仍然想知道是否是这种情况,那么它应该可以在 Android 9 设备上运行,但到目前为止也没有运气。

请在 Dropbox 中找到图像文件以确保它们保留元数据详细信息。

在调试中,它显示加载在 ExifInterface 对象中的属性,但是当应用程序尝试读取它时,它只返回 null。请查看上述共享图像的调试截图(名称:IMG_20210916_170621.jpg)。同一张图片确实显示了 macOS 预览应用程序以及可用的 Exif元数据阅读器网站中的位置详细信息(参见下面的屏幕截图)。

  • GPS详细信息截图:

全球定位系统详情

  • 调试截图:

调试截图

  • 代码:
@Parcelize
data class Image(override val url: String) : LocalMedia(url) {
    override fun toString(): String {
        return url
    }

    fun readLatLong(): Pair<Double, Double>? {
        try {
            val exifInterface = ExifInterface(url)
            exifInterface.latLong?.let {
                if (it.size == 2) {
                    return Pair(it.first(), it.last())
                }
            }
        } catch (e: Exception) {
            Timber.e(e, "Reading latLong failed")
        }
        return null
    }
}

我希望我在这里没有误解任何东西。

4

0 回答 0