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
它适用于filesDir。
将 tmp 文件存储在 cacheDir 中更有意义,因为它们就是这样,但考虑到我以后无法访问它们,我将交换到 filesDir 并在那里工作。仍然不明白为什么 listFiles 不适用于 cacheDir,但目前我找到了问题的解决方案。