Android 拍照 引发 “SecurityException has no access to content://media/...“
Posted 匆忙拥挤repeat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 拍照 引发 “SecurityException has no access to content://media/...“相关的知识,希望对你有一定的参考价值。
现象:后台日志发现,只有在 android 10 (api 29) 以上的某些机型上才会引发异常。
原创建 拍照图片的 uri 代码:
/**
* author: stone
* email: aa86799@163.com
*/
val con = contentValuesOf()
val cacheName = "xxx.jpg"
con.put(MediaStore.Images.Media.DISPLAY_NAME, cacheName)
val rootFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
con.put(MediaStore.Images.Media.DATA, File(rootFile, cacheName).absolutePath)
con.put(MediaStore.Images.Media.MIME_TYPE, "image/JPEG")
val uri = requireActivity().contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, con)
...
Environment.getExternalStoragePublicDirectory() 这个在android 10 (api 29)已过时,建议使用 Content#getExternalFilesDir() 。
再结合 官方文档,使用 FileProvider,
/**
* author: stone
* email: aa86799@163.com
*/
val cacheName = "xxx"
val rootFile = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
requireContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES)
else
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
?: return
File.createTempFile(cacheName, ".jpg", rootFile).let
val uri = FileProvider.getUriForFile(requireContext(), "FileProvider 的 Authority", it)
...
以上是关于Android 拍照 引发 “SecurityException has no access to content://media/...“的主要内容,如果未能解决你的问题,请参考以下文章
Android 拍照 引发 “SecurityException has no access to content://media/...“
android 4.1.1开发时拍照问题:拍完照,保存后没无法返回,一直停在拍照界面,4.0不会出现此种情况
android固定位置拍照,Android调用系统相机拍照并保存到指定位置