Android:列出我的应用程序自己的文件在 Android 11+ 上不起作用

问题描述 投票:0回答:1
我在应用程序的缓存目录中存储 mp3、mp4、jpg 和应用程序自己的 aw 格式,并使用下一段代码在使用后清除这些 tmp 文件:

private fun deleteTmp() { val rootFolder = File(context.cacheDir.absolutePath) val mp4 = ".*\\.mp4" val mp3 = ".*\\.mp3" val jpg = ".*\\.jpg" val gif = ".*\\.gif" val aw = ".*\\.aw" val folder = File("$rootFolder/") val files = folder.listFiles { _, name -> (name.matches(mp4.toRegex()) || name.matches(mp3.toRegex()) || name.matches(jpg.toRegex()) || name.matches(gif.toRegex()) || name.matches(aw.toRegex())) } if (files != null) { for (file in files) { file.delete() } } }
它工作得很好,直到我在 build.gradle 中将“compileSdk”从 29 升级到 35(以支持最新设备),现在 listFiles 它只获取文件夹,而不是文件。

据我所知,你不需要权限来列出你的应用程序自己的文件,事实上这些文件是我自己创建的,所以问题出在哪里?

我尝试使用 filesDir 也无济于事,所以我陷入困境。

我绝对不想在我的活动中重复向用户请求权限的繁琐任务,也认为向用户请求删除我自己创建的 tmp 文件的权限是无意义的,事实上,该应用程序的内部流程必须是对用户透明。

有什么帮助吗?

编辑1:跳过rootFolder并直接进入context.cacheDir.listFiles()

发生完全相同的情况,只看到文件夹。

顺便说一句,在我的例子中 context.filesDir -> /data/user/0/com.xxx.xxx/cache

android list kotlin file caching
1个回答
0
投票
经过彻底的测试,我可以确认 listFiles 没有从cacheDir(仅文件夹)获取文件,但

它适用于filesDir

将 tmp 文件存储在 cacheDir 中更有意义,因为它们就是这样,但考虑到我以后无法访问它们,我将交换到 filesDir 并在那里工作。

仍然不明白为什么 listFiles 不适用于 cacheDir,但目前我找到了问题的解决方案。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.