我在一个Map画廊工作。我需要照片的位置信息。在做这个的时候,我遇到了一个有线的情况。我使用intent调用ACTION_OPEN_DOCUMENT并选择了一个图像。然后使用它的MediaStore.Images.Media.EXTERNAL_CONTENT_URI生成一个输入流。最后,我将inputstream传递给ExifInterface()并获取其位置。我工作完美无瑕。
val fileInputStream = pickedImageUri?.let { it1 -> getInputStreamFromUri(context, it1) }
Timber.e("pickedImageUri:$pickedImageUri")
Timber.e("fileInputStream:$fileInputStream")
val imageExif = fileInputStream?.let { it1 -> ExifInterface(it1) }
Timber.e("imageExif:$imageExif")
val imageLocationRaw = LatLng(
imageExif?.latLong?.get(0) ?: 0.0,
imageExif?.latLong?.get(1) ?: 0.0
)
if (imageExif != null) {
Timber.e("latlong:${imageExif.latLong}")
}
Timber.e("imageLocationRaw:$imageLocationRaw")
但我认为照片选择器更方便选择照片。所以我搬到了照片拾取器。我用同样的方法提取了位置。但是,在imageExif?.latLong?.它总是null。来自Logcat的警告是“纬度/经度值不可解析。latValue=0/1,0/1,0/1,latRef=,lngValue=0/1,0/1,0/1,lngRef='
为什么?我怎么才能正确地定位?
1条答案
按热度按时间hts6caw31#
我不是唯一遇到这个问题的人。这里是另一篇关于这一点的文章。使用AndroidX ExifInterface从图像中检索GPS EXIF数据?仔细阅读文档后。我意识到这可能是照片拾取器应该工作的方式。在文档中,它说photo picker的目的是提供一种无需请求任何许可就可以访问meida的精简方式,据我所知,这意味着它不会暴露任何敏感信息,甚至不会成为一种选择。如果你需要exif和一个漂亮的照片选择器UI,你需要自己制作。