Tôi không thể truy cập bộ nhớ khi xây dựng cho targetSdkVersion v29.
Đây là cấu hình lớp của tôi:
compileSdkVersion 29
buildToolsVersion "29.0.2"
...
minSdkVersion 15
targetSdkVersion 29
LƯU Ý rằng sự WRITE_EXTERNAL_STORAGE
cho phép được cấp và thiết lập tương tự hoạt động tốt khi xây dựng targetSdkVersion 28
.
Đây là cách thực hiện của tôi:
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
}
và đây là ngoại lệ:
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)
Hy vọng ai có câu trả lời, tôi còn thiếu gì ở đây?
Cập nhật:
Đây là nơi baseFolder
đến từ. Lưu ý rằng đó getExternalStorageDirectory
là một phương pháp không dùng nữa.
val baseFolder: String = if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Environment.getExternalStorageDirectory().absolutePath
} else {
context.filesDir.absolutePath
}
Cảm ơn
targetSdkVersion 28
. Đây không phải là một vấn đề cho phép!
targetSdkVersion 28
sau đó? Theo lỗi, có, đó là vấn đề liên quan đến quyền nhưng không phải vì quyền không được cấp.