如何获得在Android 6.0+中将文件写入SDCard的权限



我正在开发一个简单的文件资源管理器来列出和写入文件。它可以在内部存储上完美运行,但在外部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卡在安卓上只读吗? 某些应用程序(如 ES 文件资源管理器(可以在外部 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);

最新更新