三星Galaxy A14授权后仍遇Permission denied问题,设置无存储权限选项
三星Galaxy A14存储权限"Permission denied"问题排查与解决
问题场景
- 设备:三星Galaxy A14
- 异常现象:尝试授权存储权限时始终提示
Permission denied,应用设置中找不到可开启的存储权限选项,打印权限状态显示拒绝,且该问题仅出现在三星设备上 - 已配置的Android清单权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
解决方案
1. 适配Android 13+存储权限变更
三星Galaxy A14通常搭载Android 13或更高版本,从Android 13开始,READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE已被废弃,需改用媒体文件专属权限:
<!-- 针对图片、视频、音频的读取权限 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
- Android 13+中,拥有对应媒体读取权限即可直接写入媒体文件,无需单独申请写入权限
- 若需操作非媒体类文件,需申请
MANAGE_EXTERNAL_STORAGE权限,但该权限仅适用于文件管理器类应用,需通过Google Play审核
2. 修正动态权限申请逻辑
在代码中根据系统版本适配权限申请:
private const val PERMISSION_REQUEST_CODE = 1001 // 动态申请对应权限 val permissionsToRequest = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { arrayOf( Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO, Manifest.permission.READ_MEDIA_AUDIO ) } else { arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE ) } ActivityCompat.requestPermissions(this, permissionsToRequest, PERMISSION_REQUEST_CODE)
3. 排查三星设备特殊权限管控
部分三星机型会对权限做特殊归类或限制,可尝试:
- 进入「设置」-「应用」-「你的应用」-「权限」,查找「文件和媒体」选项(部分三星机型将存储权限归类于此)
- 清除应用缓存和数据后重新安装,再尝试授权
- 检查三星「安全文件夹」「隐私保护」功能是否限制了应用的存储访问权限
4. 修正权限状态检查逻辑
确保代码中权限状态判断适配系统版本:
val hasStoragePermission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_IMAGES) == PackageManager.PERMISSION_GRANTED } else { ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED }
内容的提问来源于stack exchange,提问作者Mahesh Borse
相关产品推荐
相关产品推荐

