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

无法写入SD卡路径,已加权限仍报PathAccessException权限拒绝错误求助

Android SD卡写入权限被拒绝(错误码13)解决方案

问题描述:
无法写入SD卡路径,抛出异常:
PathAccessException: 无法打开文件,路径 = '/storage/0F46-190D/screenshot.png' (系统错误:权限被拒绝,错误码 = 13)
已添加的权限配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
    .....
</manifest>

<application
    android:requestLegacyExternalStorage="true"
    ....
</application> 

核心解决步骤

  • 手动授予MANAGE_EXTERNAL_STORAGE权限
    该权限是Android 11+的特殊权限,无法通过普通权限弹窗获取,必须引导用户到应用设置页开启:

    if (!Environment.isExternalStorageManager()) {
        val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
        intent.data = Uri.parse("package:" + context.packageName)
        startActivity(intent)
    }
    

    注意:Google Play对该权限的使用有严格审核,仅当应用确需全局文件管理能力时才建议使用。

  • 优先使用SD卡应用专属目录
    /storage/0F46-190D/是可移除SD卡根目录,部分设备会限制直接写入。建议写入系统分配的应用专属目录,无需额外权限:

    // 获取SD卡的应用专属目录(第二个元素为SD卡路径,需判空)
    val sdCardAppDir = context.getExternalFilesDirs(null)[1]
    if (sdCardAppDir != null) {
        val targetFile = File(sdCardAppDir, "screenshot.png")
        // 执行文件写入操作
    }
    

    此目录下的文件会随应用卸载自动删除,符合Android存储规范。

  • 适配不同Android版本的存储规则

    • Android 10(API 29):requestLegacyExternalStorage="true"仅兼容内部共享存储的旧访问方式,对可移除SD卡无效。
    • Android 11+:强制启用Scoped Storage,非应用专属目录的写入必须依赖MANAGE_EXTERNAL_STORAGE权限。
  • 检查普通权限请求逻辑
    READ/WRITE_EXTERNAL_STORAGE在Android 10+仅对内部共享存储生效,对可移除SD卡无法直接写入根目录。确保低版本设备的权限请求流程正确:

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R && 
        ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_STORAGE_CODE)
    }
    

额外注意事项

  • 避免直接写入SD卡根目录,部分厂商设备会对根目录做额外保护。
  • 测试时使用真实设备,模拟器的SD卡权限逻辑可能与真机存在差异。
  • 若仅需保存应用自有文件,优先使用应用专属目录,无需申请特殊权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:22:45