android - 如何从可移动 sd 卡(第二个外部存储)中删除文件?
问题描述
我正在尝试从我的 sd 卡(可移动)中删除 android 9 上的文件(PATH_TO_SD_CARD/DCIM/1.PDF)。
1.我得到第二个是我的sd卡的volumePaths。
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());
日志猫
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;
}
}
日志猫
2019-07-19 17:23:20.523 14343-14343/com.spicysoftware.spicypdfreader V/FILE: NOT DELETED
所以我的问题是:如何从可移动 sd 卡(第二个外部存储)中删除文件?这太奇怪了......我在这个问题上待了 2 天,但没有找到任何解决方案如何删除这张 SD 卡上的文件......
我还使用了不起作用的存储访问框架。如果这是处理该问题的唯一方法,请添加一个示例。
解决方案
如何从可移动 sd 卡(第二个外部存储)中删除文件?
你没有。您没有对可移动存储上任意位置的读/写访问权限。
我还使用了不起作用的存储访问框架
并不真地。你曾经ACTION_OPEN_DOCUMENT_TREE
得到一个Uri
,然后试图把它变成一个File
。那是行不通的,因为 aUri
不是文件。
最简单的解决方案是:
利用
ACTION_OPEN_DOCUMENT
传递
Uri
你得到的(data.getData()
从你的问题)并将它传递给DocumentFile.fromSingleUri()
呼吁
delete()
那个DocumentFile
推荐阅读
- python - 你能提供一种不理解的方式来编写下面的代码吗
- extract - 表中的 Storetext 选择正确的行来存储 Selenium Ide Ui Vision Kantu
- ruby-on-rails - 删除 Rails 迁移但不删除模型
- angular - 如何在动态加载的 Angular 模块中正确设置路由?
- python - python结果显示的东西比我预期的不同
- python - cv2.rectangle() 调用重载方法,虽然我给出了其他参数
- java - 使用 IntelliJ IDEA 启动一个新的 Web 应用程序项目
- python - 如何基于另一个带有日期的列创建 Pandas 列?
- ios - Xamarin.iOS 上的 Xamarin.Build.Download 包问题
- java - 如何将 Firebase 实时数据库中的所有数据显示到 TextView