我正在尝试从我的 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
}
}
我希望我在这里没有误解任何东西。