簡體   English   中英

如何在 Android 6.0+ 中獲得將文件寫入 SDCard 的權限

[英]How to get permission to write files into SDCard in Android 6.0+

我正在開發一個簡單的文件資源管理器來列出和寫入文件。 它在內部存儲上完美運行,但不適用於外部 SD 卡(寫入文件被拒絕訪問)。 我在 AndroidManifest.xml 文件中有這些權限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我在應用程序啟動時請求他們。 但我仍然無法將文件保存在外部 SD 上。 當我嘗試使用FileOutputStream進行寫入時,它會使用路徑/storage/(sdcard folder)/引發FileNotFoundException

java.io.FileNotFoundException: /storage/27BB-C7D9/Download/353874.jpg: open failed: EACCES (Permission denied)

SD卡在Android上是只讀的嗎? 一些應用程序,如 ES File Explorer 可以在外部 SD 上寫入文件。 是否有一些功能可以用來獲得足夠的權限?

謝謝。

您需要使用documentFile

請參閱我對有關 SD 卡的舊問題的回答,以了解如何在此處訪問您的 SD 卡。

在 API 級別 23 以上,您必須在運行時請求它

String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permissions, WRITE_REQUEST_CODE);

現在像這樣覆蓋 onRequestPermissionsResult 方法

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_EXTERNAL_STORAGE:
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // write here
            } else {
                 // show message to user that permission needed
            }
        ....
    }
} 

試試這個代碼:

File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/dir1/dir2");
dir.mkdirs();
File file = new File(dir, "filename");
FileOutputStream f = new FileOutputStream(file);

暫無
暫無

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

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