我想将图像保存在外部存储器中。我的功能适用于android 5,但不适用于android8。
我在清单中有android.permission.WRITE_EXTERNAL_STORAGE
。
private fun saveImageToExternalStorage(finalBitmap: Bitmap) {
val root =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()
val myDir = File("$root/saved_images_1")
myDir.mkdirs()
val generator = Random()
var n = 10000
n = generator.nextInt(n)
val fName = "Image-$n.jpg"
val file = File(myDir, fName)
if (file.exists())
file.delete()
try {
val out = FileOutputStream(file)
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)
out.flush()
out.close()
} catch (e: Exception) {
e.printStackTrace()
}
MediaScannerConnection.scanFile(this, arrayOf(file.toString()), null,
object : MediaScannerConnection.OnScanCompletedListener {
override fun onScanCompleted(path: String, uri: Uri) {
Log.i("ExternalStorage", "Scanned $path:")
Log.i("ExternalStorage", "-> uri=$uri")
}
})
}
想用context.contentResolver
进行更改,但不能:(希望您能提供帮助!
答案 0 :(得分:0)
从23以上的SDK版本开始,您需要添加一些用于URI公开的内容。 扩展应用程序类以及位于代码下方的onCreate()方法内部,
empty.jar
然后在Manifest.xml中更改
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
if (Build.VERSION.SDK_INT > 23) {
builder.detectFileUriExposure();
}
希望,这将解决您的问题。