如何在外部存储上创建公共目录?

时间:2018-08-19 09:04:42

标签: android android-sdcard android-external-storage readonly-attribute

我正在尝试将公共文件保存在外部存储中。 我正在从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目录可写?

谢谢。

2 个答案:

答案 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的内容并写入公共目录(文件,图片,下载等)中。