我正在尝试将公共文件保存在外部存储中。 我正在从Android开发人员页面关注以下示例: https://developer.android.com/training/data-storage/files#PublicFiles
首先,我尝试在公共目录DIRECTORY_DOCUMENTS中创建目录“ mydocuments”。代码就像
一样简单TextView tv= findViewById(R.id.myTextview);
// Get the directory for the user's public pictures directory.
File documents= Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOCUMENTS);
tv.append("\n documents directory=" + documents);
File file = new File(documents, "mydocuments");
tv.append("\n\nDirectory to be created=" + file);
if (file.exists())
tv.append("\n\nFile already exists:" + file.getAbsolutePath());
else{
if (!file.mkdirs())
tv.append("\n\nDirectory not created:" + file.getAbsolutePath());
我在清单文件中添加了权限
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
但是,当我在虚拟或物理设备中运行此命令时,结果始终相同:
documents directory=/storage/emulated/0/Documents
Directory to be created=/storage/emulated/0/Documents/mydocuments
Directory not created:/storage/emulated/0/Download/mydocuments
如何使Documents目录可写?
谢谢。
答案 0 :(得分:0)
您今年有#1278这个问题。
对于Android 6+,您必须添加代码以要求用户确认清单文件中要求的权限。
Google的运行时权限。
您还可以转到应用程序的设置,然后将存储权限切换为开。
答案 1 :(得分:0)
由于@greenapps的建议,我解决了我的问题。这是我发现写在SD卡上Documents目录中的最简单的解决方案,如
所述https://developer.android.com/training/permissions/requesting
1 .- 。首先在代码开头的某处询问用户权限:
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS);
我之前定义常量的地方
final int MY_PERMISSIONS=1;
2 .- 然后实现上面的代码,以方法内
的方式写在SD卡上@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// task you need to do.
writeSD(); // this is the code to write on the SD card shown above
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
tv.append("\n\n No permission given");
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
这为我解决了这个问题。第一次执行时,会打开一个对话框,询问权限。之后,就可以读取sdcard的内容并写入公共目录(文件,图片,下载等)中。