在我的 Android 应用程序中,我想创建在应用程序卸载时保留的文件。
我可以在
中创建隐藏文件File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), ".SecretFolder")
我的目标是更改此文件的读写权限。
我尝试卸载我的应用程序 -> 文件已保留。在阅读时安装后,我收到 AccessDeniedException
现在,如果我想使用
File.setReadable(true, false)
和 File.setWritable(true, false)
更改读写权限,即使 API 对两者都返回 true,我也可以在 Android 设备文件资源管理器中观察到没有任何变化(仍然是 -rw-------) .
注意:我使用的是基于 Android 11、API 30 的虚拟设备。我并不是专门针对此版本
这是我的代码:
private fun writeFileOnInternalStorage(remainingToken : Int) {
val dir = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), ".SecretFolder")
if(!dir.exists()){
if(dir.mkdirs()){
var allowed = dir.setReadable(true, false)
println("DBEUG dir ${dir.toPath()} is world-readable ? $allowed")
allowed = dir.setWritable(true, false)
println("DBEUG dir ${dir.toPath()} is world-writable ? $allowed")
}else{
println("ERROR")
return
}
}
val f = File(dir, ".secretFile")
if(!f.exists()){
f.createNewFile()
var allowed = f.setReadable(true, false)
println("DBEUG ${f.toPath()} is world-readable ? $allowed")
allowed = f.setWritable(true, false)
println("DBEUG ${f.toPath()} is world-writable ? $allowed")
}
f.writeText(remainingToken.toString())
println("DEBUG: written Internal Storage \"${remainingToken}\" in " + f.toPath().toString())
}
您没有该文件的权限,因此您无权更改该文件的权限。
Documents/
中的文件只能由创建该文件的应用程序访问,并且仅限于该应用程序的特定安装。卸载并重新安装的应用程序被视为独立安装。
(我怀疑该技术是否有效,因为 Android 管理文件权限的方式不同)
通常,我会引导您使用存储访问框架。然而,这是为了满足用户的需求而设计的:让他们控制存储。您试图向用户隐藏您的活动。 Google、设备制造商和用户正在非常努力地阻止开发者这样做。