[英]How to delete file from removable sd card (second external storage)?
我試圖從我的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]);
LocCat:
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卡上的文件...
我還使用了無效的存儲訪問框架。 如果它是處理的唯一方法請添加一個例子。
如何從可移動SD卡(第二外部存儲)中刪除文件?
你沒有。 您沒有對可移動存儲上的任意位置的讀/寫訪問權限。
我還使用了無效的存儲訪問框架
並不是的。 您使用ACTION_OPEN_DOCUMENT_TREE
獲取Uri
,然后嘗試將其轉換為File
。 這不起作用,因為Uri
不是文件。
最簡單的解決方案是:
使用ACTION_OPEN_DOCUMENT
傳遞你得到的Uri
data.getData()
你的問題中的data.getData()
)並將其傳遞給DocumentFile.fromSingleUri()
在DocumentFile
上調用delete()
通過安全性,您可以訪問SD卡,但只能將文件寫入和讀取為應用程序創建的目錄或應用程序創建的目錄中的文件 (使用WRITE_EXTERNAL_STORAGE
權限)。
例如,如果您的外部存儲路徑是
/storage/13257-13257/
您的應用包名稱是com.spicysoftware.spicypdfreader
您可以訪問和刪除在此路徑中創建的文件:
/storage/13257-13257/com.spicysoftware.spicypdfreader
順便提一句,我建議您使用ContextCompat.getExternalFilesDirs(context, null)
來獲取/ files目錄/storage/13257-13257/com.spicysoftware.spicypdfreader/files
的路徑。
例:
File[] storages = ContextCompat.getExternalFilesDirs(context, null);
Log.i(TAG, "storage[0]: " + storages[0]);
Log.i(TAG, "storage[1]: " + storages[1]);
總之,你可以在這里刪除文件:
new File("/storage/13257-13257/com.spicysoftware.spicypdfreader/files/1.PDF").delete();
或者這里(外部/files
目錄):
new File("/storage/13257-13257/com.spicysoftware.spicypdfreader/1.PDF").delete();
但是不可能這樣做:
new File("/storage/13257-13257/DCIM/1.PDF").delete();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.