android - 如何从可移动 SD 卡(第二个外部存储)中删除文件?

标签 android delete-file

我正在尝试从我的 SD 卡(可移动)中删除 Android 9 上的文件 (PATH_TO_SD_CARD/DCIM/1.PDF)。

<强>1。我得到 volumePaths,其中第二个是我的 SD 卡。

private static String[] getVolumePaths(Context context) {
    String[] volumes = null;
    StorageManager managerStorage = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
    if (managerStorage == null) {
        return volumes;
    }
    try {
        return (String[]) managerStorage.getClass().getMethod("getVolumePaths", new Class[0]).invoke(managerStorage, new Object[0]);
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
        return volumes;
    } catch (IllegalArgumentException e2) {
        e2.printStackTrace();
        return volumes;
    } catch (IllegalAccessException e3) {
        e3.printStackTrace();
        return volumes;
    } catch (InvocationTargetException e4) {
        e4.printStackTrace();
        return volumes;
    }
}

    String[] volumePaths = getVolumePaths(getContext());
    Log.v("VOLUME1: ", "-> "+volumePaths[0]);
    Log.v("VOLUME2: ", "-> "+volumePaths[1]);

位置猫:

2019-07-19 17:06:15.577 13257-13257/com.spicysoftware.spicypdfreader V/VOLUME2:: -> /storage/2585-1513

<强>2。我检查是否存在返回 true 的文件

Log.v("FILE EXISTS?", "-> "+new File("/storage/2585-1513/DCIM/1.PDF").exists());

LogCat

2019-07-19 17:06:16.577 13257-13257/com.spicysoftware.spicypdfreader V/FILE EXISTS? -> true

3.1 我正在尝试删除文件

但是这种方式不行,为什么?

new File("/storage/2585-1513/DCIM/1.PDF").delete();

3.2 我正在尝试通过 DOCUMENT_FILE_TREE 删除文件

// call for document tree dialog
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 123);

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case 123:
            if (resultCode == Activity.RESULT_OK) {
                String strFilePath = data.getData().getPath()+"/DCIM/1.PDF";
                try {
                    if(new File(strFilePath).delete()){
                        Log.v("FILE", "DELETED");
                    }else{
                        Log.v("FILE", "NOT DELETED");
                    }
                }catch (Exception e){
                    Log.v("ERROR: ", "-> "+e);
                }
            }
            break;
    }
}

LogCat

2019-07-19 17:23:20.523 14343-14343/com.spicysoftware.spicypdfreader V/FILE: NOT DELETED

所以我的问题是:如何从可移动 SD 卡(第二个外部存储)中删除文件?这太奇怪了... 我在这个问题上花了 2 天时间,但没有找到任何解决方案如何删除此 SD 卡上的文件...

我还使用了不起作用的存储访问框架。 如果这是处理该问题的唯一方法,请添加示例。

最佳答案

How to delete file from removable sd card (second external storage)?

你不知道。您没有对可移动存储上任意位置的读/写访问权限。

I also used the storage access framework which did not work

不是真的。您使用 ACTION_OPEN_DOCUMENT_TREE 获取了 Uri,然后尝试将其转换为 File。这是行不通的,因为 Uri 不是文件。

最简单的解决方案是:

  • 使用ACTION_OPEN_DOCUMENT

  • 传递您获得的 Uri(data.getData() 来自您的问题)并将其传递给 DocumentFile.fromSingleUri()

  • 对该DocumentFile

    调用delete()

关于android - 如何从可移动 SD 卡(第二个外部存储)中删除文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57115519/

相关文章:

android - Users\[username] 目录下的两个 .AndroidStudio 文件夹

C++ 如何使我的程序不会删除正在使用的文件?

amazon-s3 - 如何从 S3 中删除名称为空的文件

google-apps-script - 自动从 Google Drive 垃圾箱中删除文件

powershell - 能做到吗根据文件使用Powershell的年代删除大量文件

android - ListView 和屏幕方向

Android WebView 标记无法使用 tel Uri 启动 Intent

android - 如何从build.gradle根文件向Android Gradle子项目添加javadoc任务?

android - 字符串操作建议

java - 能够在没有权限的情况下删除文件