1

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

先感谢您。

4

2 回答 2

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 的内容并写入公共目录 DOCUMENTS、PICTURES、DOWNLOADS 等。

于 2018-08-19T10:29:42.407 回答
0

今年你在这个问题上是#1278。

对于 Android 6+,您必须添加代码以要求用户确认您在清单文件中请求的权限。

谷歌运行时权限。

您还可以转到应用程序的设置并将存储权限切换为打开。

于 2018-08-19T09:30:49.630 回答