簡體   English   中英

錯誤:java.io.IOException:android 11 中沒有此類文件或目錄

[英]Error: java.io.IOException: No such file or directory in android 11

我試圖在文件系統上創建一個文件,但我仍然得到這個異常:

private fun getTempFolder(): File {
        val directoryFolder =
            File(Environment.getExternalStorageDirectory(), "sample-take-image")
        directoryFolder.mkdirs()
        return directoryFolder
    }
    private fun getTempFile(): File {
        val timeStamp = SimpleDateFormat("yyyyMMdd_HHMMss", Locale.getDefault()).format(Date())
        return File(
            getTempFolder().absolutePath,
            "image".plus(Calendar.getInstance().timeInMillis).plus(timeStamp).plus(".jpg")
        )
    }
    private fun saveImageToFile(bitmap: Bitmap? = null): String? {
        return try {
            val file = getTempFile()
            Timber.e("Path: + : ${file.absolutePath}")
            file.createNewFile()
            val fOut = FileOutputStream(file)
            bitmap?.apply {
                this.compress(Bitmap.CompressFormat.JPEG, 100, fOut)
            }
            fOut.flush()
            fOut.close()
            file?.absolutePath.getDefault()
        } catch (e: Exception) {
            e.printStackTrace()
            ""
        }
    }

即使我在拍攝照片后獲得了鏈接:

: /storage/emulated/0/sample-take-image/image162064003789420210510_160517.jpg

所以有人可以告訴我為什么在這種情況下我不能創建文件。 我目前在Android 11

**compileSdkVersion 30

buildToolsVersion "30.0.2"

minSdkVersion 26**

在 Android 11 設備上,您無法在外部存儲的根目錄中創建目錄或文件。

但是您可以在所有已經存在的公共目錄中。

File(Environment.getExternalStorageDirectory(), "sample-take-image")

例如替換為:

File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "sample-take-image")

使用 getExternalFilesDir()、getExternalCacheDir() 或 getExternalMediaDirs()(Context 上的方法)而不是 Environment.getExternalStorageDirectory(),因為它已被棄用。

String dirPath;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
                dirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath() + "/" + getString(R.string.app_name) + "/";
            } else {
                dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + getString(R.string.app_name) + "/";
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM