我有疑问,如何在 Android 11(或 10)上删除文件夹?
Stack 上有很多关于如何做到这一点的答案,但没有任何效果。
此代码在 Android 5 上适用于我:
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// The directory is now empty so delete it
return dir.delete();
}
在最新版本的 Android 上它不起作用。我注意到有些应用程序可以做到这一点,所以我认为这是可能的。有什么答案吗?
自 Android 10 和 11 以来,Android 在改变文件访问权限模型方面做了很多工作。首选方法是使用 Scoped Storage APIs。
许多旧文件读/写权限已失效,将不再起作用。如果它们确实继续工作,则必须向 Google 证明您需要它们的原因,然后通过 Google 的安全批准。仅当您的应用程序被分类为文件浏览器应用程序等时,您才会获得批准。
基本上,新模型是使用Android的文件浏览器来读取/写入/更新用户选择的特定文件,并将其余的文件管理工作交给Google的第一方应用程序。您获得的访问权限取决于用户在第一方文件浏览器中选择的内容。然后,您将收到一个 URI,并具有执行预期操作(例如读/写等)的适当权限...
您可能会发现此视频很有用:
你尝试过 Context.deleteFile() 吗?
getApplicationContext().deleteFile(filename);
删除ExternalFilesDir中的所有文件
fun removeAllFilesInExternalFilesDir(context: Context, folder: String) {
context.getExternalFilesDir(folder)?.listFiles()?.forEach {
it.delete()
}
}