Ich kann beim Erstellen für targetSdkVersion v29 nicht auf den Speicher zugreifen.
Hier ist meine Gradle-Konfiguration:
compileSdkVersion 29
buildToolsVersion "29.0.2"
...
minSdkVersion 15
targetSdkVersion 29
HINWEIS: Die WRITE_EXTERNAL_STORAGE
Berechtigung wird erteilt, und dasselbe Setup funktioniert beim Erstellen für targetSdkVersion 28
.
Hier ist meine Implementierung:
val outputFolder = File(baseFolder + File.separator + "Output Folder")
if (!outputFolder.exists()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Files.createDirectory(outputFolder.toPath()) //This allways returns false with targetSdkVersion 29
} else {
if (!outputFolder.mkdirs()) {
Log.e("SaveRaw", "Unable to create folder for audio recording")
}
}
}
outputFile = File("$baseFolder/Output Folder/$filename")
try {
fileOutputStream = FileOutputStream(outputFile)
} catch (e: FileNotFoundException) {
e.printStackTrace() // allways throwing exception here, even if Output Folder exists
}
und hier ist die Ausnahme:
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Chirp Auto Tester/2019_10_17 10:44:43.raw: open failed: EACCES (Permission denied)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:496)
at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
Hoffe jemand hat eine Antwort, was vermisse ich hier?
Aktualisieren:
Hier kommt woher baseFolder
. Beachten Sie, dass dies getExternalStorageDirectory
eine veraltete Methode ist.
val baseFolder: String = if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Environment.getExternalStorageDirectory().absolutePath
} else {
context.filesDir.absolutePath
}
Vielen Dank
targetSdkVersion 28
. Dies ist kein Berechtigungsproblem!
targetSdkVersion 28
dann funktioniert ? Laut Fehler handelt es sich um ein Problem mit Berechtigungen, jedoch nicht, weil die Berechtigungen nicht erteilt wurden.