問題
java.io.FileNotFoundException: /storage/emulated/0/Download/xxx: open failed: EACCES (Permission denied)
首先需要說明一下我的這個問題是Android 10才出現(xiàn)的荒吏,Android10以下的都沒有鸭巴,這里主要說的不是動態(tài)申請訪問文件的權(quán)限問題换衬。因為我已經(jīng)動態(tài)申請了權(quán)限捌斧,并且在獲得權(quán)限后存儲文件報的這個錯誤。
解決
先說一下解決版本只需要在AndroidManifest.xml文件的application 標(biāo)簽下 加一條屬性 android:requestLegacyExternalStorage="true"就可以解決了圃泡。
原因
究其原因就是Android10棄用了管理分區(qū)外部儲存
所以如果要在Android10上創(chuàng)建文件的話需要如下所示的代碼創(chuàng)建文件后添。
上邊的解決辦法是禁用了這個管理分區(qū)
但是將來是要適配Android10的 所以最終的解決辦法是如下代碼所示的方式創(chuàng)建文件。
// Here are some examples of how you might call this method.
// The first parameter is the MIME type, and the second parameter is the name
// of the file you are creating:
//
// createFile("text/plain", "foobar.txt");
// createFile("image/png", "mypicture.png");
// Unique request code.
private static final int WRITE_REQUEST_CODE = 43;
...
private void createFile(String mimeType, String fileName) {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
// Filter to only show results that can be "opened", such as
// a file (as opposed to a list of contacts or timezones).
intent.addCategory(Intent.CATEGORY_OPENABLE);
// Create a file with the requested MIME type.
intent.setType(mimeType);
intent.putExtra(Intent.EXTRA_TITLE, fileName);
startActivityForResult(intent, WRITE_REQUEST_CODE);
}