Android 13+下载PDF文件所需权限咨询(WRITE_EXTERNAL_STORAGE已失效)
Android 13及以上版本下载PDF文件的权限说明
核心结论
Android 13(API 33)及更高版本中,WRITE_EXTERNAL_STORAGE权限已完全失效,无需再申请。根据文件保存位置的不同,权限要求分为两种情况:
保存到应用私有目录:无需任何权限
应用私有目录下的文件仅当前应用可访问,读写操作不受限制。可通过getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)获取PDF的保存路径,直接执行下载写入操作即可。保存到公共存储目录(如系统Documents文件夹):
有两种合规实现方式:- 使用MANAGE_EXTERNAL_STORAGE权限:此权限允许应用访问公共存储的所有文件,但需要在Google Play审核时说明合理用途,仅推荐给文件管理器类等确实需要全存储访问的应用。
- 使用系统文件选择器(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
相关产品推荐
相关产品推荐

