我最近将我的应用程序切换到了Scoped Storage。然而,我注意到,当我在应用程序中共享图像时(通过Intent(,GPS位置数据会从图像的Exif元数据中删除。我知道Scoped Storage在访问映像的Exif位置数据方面有一些限制,我也知道权限<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
,但在共享映像时,添加此权限似乎没有任何效果。知道如何通过Intent共享图像,同时保留图像Exif数据中的位置数据吗?
这是我的代码:
val imageUri = mediaList[photo_view_pager.currentItem].uri
val intent = Intent().apply {
val mediaType = MimeTypeMap.getSingleton()
.getMimeTypeFromExtension("jpg")
putExtra(Intent.EXTRA_STREAM, imageUri)
type = mediaType
action = Intent.ACTION_SEND
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
}
startActivity(Intent.createChooser(intent, getString(R.string.share_hint)))
提前感谢您的帮助!
我在Android 11上的体验。
也必须在运行时请求ACCESS_MEDIA_LOCATION。
服务应用程序应具有"所有文件访问权限",以便接收应用程序从exif读取lat,lon。
如果服务应用程序可以访问所有文件,则不需要MediaStore.setRequireOriginal从文件中读取lat,lon本身。
(我从未使用过MediaStore.setRequireOriginal,但现在将进行调查(。