无法将图像保存在android Oreo的外部存储设备中

时间:2019-09-30 20:40:02

标签: android kotlin android-8.0-oreo android-external-storage

我想将图像保存在外部存储器中。我的功能适用于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进行更改,但不能:(希望您能提供帮助!

1 个答案:

答案 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();
    }

希望,这将解决您的问题。