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

Android应用获取内部存储读写权限失败求助(SDK23-35)

Android 存储权限获取失败原因分析(targetSdkVersion 35)
  • Android 13+权限拆分导致旧权限失效
    从API 33开始,系统把原有的READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE拆成了细分的媒体权限:READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO。如果你的应用访问的是媒体文件,旧权限在API33+设备上已经不生效,必须申请对应的新权限。

  • 混淆内部存储与外部存储的权限要求
    Android的应用私有内部存储(路径/data/data/你的包名/)不需要任何权限就能读写,只有访问公共外部存储(比如相册、下载目录、SD卡)才需要权限。如果你的操作是针对内部私有存储,那加这些权限完全没必要,可能是你搞错了存储路径。

  • 缺少动态权限申请步骤
    Android 6.0(API23)及以上,危险权限(包括存储类权限)除了在清单文件声明,还必须动态向用户申请:

    1. 用ContextCompat.checkSelfPermission()检查权限是否已授予
    2. 未授予时调用ActivityCompat.requestPermissions()发起申请
    3. 通过onRequestPermissionsResult()或ActivityResultAPI处理申请结果
      只加清单声明不做动态申请,权限肯定拿不到。
  • 全外部存储访问需要特殊权限
    如果你的应用需要访问外部存储的所有文件(不是仅媒体),比如文档、下载目录里的非媒体文件,从Android 11(API30)开始,WRITE_EXTERNAL_STORAGE就被废弃了,必须申请MANAGE_EXTERNAL_STORAGE权限。这个权限不能通过常规弹窗申请,需要引导用户跳转到系统设置手动开启,而且Google Play对这类权限的审核极严,只有文件管理器、备份工具等特定类型应用才能通过审核。

  • 权限声明未做版本适配
    要针对不同API级别做权限声明的条件限制,否则旧权限在高版本设备上无效:

    <!-- API < 33 适用的旧存储权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />
    
    <!-- API >=33 适用的媒体权限 -->
    <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" />
    

内容的提问来源于stack exchange,提问作者Bhoon Hoki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:30:03