如何在Android 11上删除文件夹?

uujelgoq  于 2023-10-14  发布在  Android
关注(0)|答案(3)|浏览(241)

我有一个疑问,我如何删除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上,它不工作。我注意到有应用程序可以做到这一点,所以我想这是可能的。有什么答案吗?

jdg4fx2g

jdg4fx2g1#

自Android 10和11以来,Android在文件访问权限模型方面做了很多改变。首选方法是使用Scoped Storage APIs
许多旧的文件读/写权限处于生命支持状态,将不再工作。如果他们继续工作,那么必须向谷歌证明为什么你需要他们,然后通过谷歌的安全批准。只有当您的应用程序被归类为文件浏览器应用程序或类似应用程序时,您才会获得批准。
基本上,新的模式是使用Android的文件浏览器来访问读/写/更新用户选择的特定文件,并将其余的文件管理交给Google的第一方应用程序。您获得的访问权限取决于用户在第一方文件浏览器中选择的内容。然后,您将返回一个URI到您的应用程序,并具有执行预期操作的适当权限,例如读/写/等。
你可能会发现这个视频很有用:
https://www.youtube.com/watch?v=RjyYCUW-9tY

t40tm48m

t40tm48m2#

你有没有试过context.deleteFile()?

getApplicationContext().deleteFile(filename);
3bygqnnd

3bygqnnd3#

删除ExternalFilesDir中的所有文件

fun removeAllFilesInExternalFilesDir(context: Context, folder: String) {
    context.getExternalFilesDir(folder)?.listFiles()?.forEach {
        it.delete()
    }
}

相关问题