写入文件时权限被拒绝

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

尝试使用以下代码在按钮中逐行保存文件:

rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { fileUri ->
                        if (fileUri != null) {
                            Consts.file = fileUri
                               }
}
try{
            val outputStream = context.contentResolver.openOutputStream(Consts.file!!)
            outputStream.use {stream->
                val writer = OutputStreamWriter(stream)
                lineList.forEach{line ->
                    writer.write(line)
                }
                writer.flush()
                Log.e("Tag","file saved successfully")
            }
        }catch (e:Exception){
            Log.e("Tag","error while saving file !  ",e)
        }

并在 AndroidManifest.xml 中添加这些行:

<!--this is for androids above 10-->
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
    <!--this is for androids below 10-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我会收到此错误:

java.lang.SecurityException:权限拒绝:写入 >com.android.providers.media.MediaDocumentsProvider uri >content://com.android.providers.media.documents/document/document%3A1000000045 来自 pid=5704,>uid= 10191 需要 android.permission.MANAGE_DOCUMENTS,或 grantUriPermission()

正如错误所说,我在 android 清单文件中添加了 MANAGE_DOCUMENTS 权限,并在写入文件之前添加了 grantUriPermission :

context.grantUriPermission("com.sina.writeeditor" , Consts.file!! , Intent.FLAG_GRANT_WRITE_URI_PERMISSION)

但又出现同样的错误。

android kotlin uri file-writing
1个回答
0
投票

使用 GetContent() 获取的文件 uri 不可写。

因此出现 SecurityException。

使用 GetContent() 不需要清单中的任何权限。

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