【问题标题】:How do you allow your program to read and Write in the Downloads Folder您如何允许您的程序在下载文件夹中读取和写入
【发布时间】:2021-08-27 19:07:41
【问题描述】:

在互联网上搜索有关授予写入权限和被弃用函数回溯的信息后,我发现了两个术语,这应该让我获得更新在下载文件夹中创建的文件的权限:存储访问框架中的 ACTION_OPEN_DOCUMENT_TREE 和 ActivityCompat.requestPermissions()

然而,虽然存储访问框架不提供我所寻求的(人们选择保存点,所以无论他们选择哪里我都需要工作许可),我无法让 requestPermissions() 函数工作。

那么,您如何获得更改应用在某处创建的文件的权限(通过 Storage Acces Frame),可能以适用于 Android 9-11 的方式。最好是在 Kotlin 中,但在这一点上我并不挑剔,并且会适应你能给我的任何东西

编辑:忘了说,我使用的文件是带有 Json 数据的 Textfile 文件

请帮忙

【问题讨论】:

    标签: android file kotlin permissions


    【解决方案1】:

    如果您正在处理媒体文件并针对 android q 或更多,这可能会起作用:

    假设您已经获得了要修改的文件 uri,您将访问文件代码放在 try-catch 块中,然后您可以捕获 RecoverableSecurityException 从中您可以获取 actionIntent 并要求用户授予修改特定文件的权限,这里是那个的示例代码

    private fun onDeleteClick(uri: Uri?) {
        uri?.let {
            try {
                contentResolver.delete(it,null,null)
            } catch (se:SecurityException){
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
                    val securityException = se as RecoverableSecurityException
                    val intentSender = securityException.userAction.actionIntent
                    startIntentSenderForResult(intentSender.intentSender,0x11,null,0,0,0)
                } else
                {
                    throw SecurityException()
                }
            }
        }
    }
    

    要监听用户对权限请求的响应,您可以像这样覆盖 onRequestPermissionsResult

     override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        if (requestCode ==  1){
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED ){
                //you should be able to modify file now 
             
            } else {
                Toast.makeText(this,"Permission was denied to access files",Toast.LENGTH_LONG).show()
            }
        }
    }
    

    【讨论】:

    • 谢谢,但遗憾的是,这似乎不是我正在寻找的。我正在尝试将 Json 数据写入一个文本文件,该文件稍后也可以由应用程序导入,这会导致“EACCES(权限被拒绝)”。
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多