在Android 10中,需要在应用中添加适当的权限才能读取照片文件。在AndroidManifest.xml中添加以下代码:
在Android 10之后,ExifInterface可能无法读取照片文件中的GPS信息。相反,您可以使用MediaStore API在新的标记中获取照片的经纬度信息。在以下示例代码中,我们先从MediaStore查询照片的位置信息,然后再从ExifInterface中获取GPS信息。
val projection = arrayOf(
MediaStore.Images.Media._ID,
MediaStore.Images.Media.LATITUDE,
MediaStore.Images.Media.LONGITUDE
)
val selection = "${MediaStore.Images.Media.LATITUDE} IS NOT NULL AND " +
"${MediaStore.Images.Media.LONGITUDE} IS NOT NULL"
val query = contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
null,
null
)
query?.use { cursor ->
val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID)
val latitudeColumn =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.LATITUDE)
val longitudeColumn =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.LONGITUDE)
while (cursor.moveToNext()) {
val id = cursor.getLong(idColumn)
val latitude = cursor.getDouble(latitudeColumn)
val longitude = cursor.getDouble(longitudeColumn)
val exif = ExifInterface(getContentResolver().openInputStream(Uri.parse("${
MediaStore.Images.Media.EXTERNAL_CONTENT_URI}/$id")))
exif.setAttribute(
ExifInterface.TAG_GPS_LATITUDE,
Location.convert(latitude, Location.FORMAT_SECONDS)
)
exif.setAttribute(
ExifInterface.TAG_GPS_LONGITUDE,
Location.convert(longitude, Location.FORMAT_SECONDS)
)
exif.saveAttributes()
}
}
此代码查询具有非