以编程方式更改 Android 应用程序上的文件权限

问题描述 投票:0回答:1

在我的 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())
        }
android file-permissions
1个回答
0
投票

您没有该文件的权限,因此您无权更改该文件的权限。

Documents/
中的文件只能由创建该文件的应用程序访问,并且仅限于该应用程序的特定安装。卸载并重新安装的应用程序被视为独立安装。

(我怀疑该技术是否有效,因为 Android 管理文件权限的方式不同)

通常,我会引导您使用存储访问框架。然而,这是为了满足用户的需求而设计的:让他们控制存储。您试图向用户隐藏您的活动。 Google、设备制造商和用户正在非常努力地阻止开发者这样做。

© www.soinside.com 2019 - 2024. All rights reserved.