You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13+下载PDF文件所需权限咨询(WRITE_EXTERNAL_STORAGE已失效)

Android 13及以上版本下载PDF文件的权限说明

核心结论

Android 13(API 33)及更高版本中,WRITE_EXTERNAL_STORAGE权限已完全失效,无需再申请。根据文件保存位置的不同,权限要求分为两种情况:

  • 保存到应用私有目录:无需任何权限
    应用私有目录下的文件仅当前应用可访问,读写操作不受限制。可通过getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)获取PDF的保存路径,直接执行下载写入操作即可。

  • 保存到公共存储目录(如系统Documents文件夹):
    有两种合规实现方式:

    1. 使用MANAGE_EXTERNAL_STORAGE权限:此权限允许应用访问公共存储的所有文件,但需要在Google Play审核时说明合理用途,仅推荐给文件管理器类等确实需要全存储访问的应用。
    2. 使用系统文件选择器(SAF,Storage Access Framework):无需申请权限,通过让用户手动选择保存位置完成文件写入,这是Google官方推荐的通用方案。

修改后的权限检查代码示例

如果需要兼容低版本并适配Android 13+,可按以下方式调整代码:

private fun checkAndRequestPermissions() {
    when {
        // Android 12及以下版本,仍需申请WRITE_EXTERNAL_STORAGE
        Build.VERSION.SDK_INT <= Build.VERSION_CODES.S -> {
            if (ContextCompat.checkSelfPermission(
                    this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
                ) != PackageManager.PERMISSION_GRANTED
            ) {
                ActivityCompat.requestPermissions(
                    this,
                    arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
                    100
                )
            }
        }
        // Android 13及以上版本,若需全存储访问才申请MANAGE_EXTERNAL_STORAGE
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> {
            if (!Environment.isExternalStorageManager()) {
                val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
                intent.data = Uri.parse("package:$packageName")
                startActivity(intent)
            }
        }
    }
}

注意:如果采用SAF方案,无需上述权限检查代码,直接调用文件选择器让用户指定保存路径即可。

内容的提问来源于stack exchange,提问作者Dhaneswar Ojha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:25:54