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

KivyMD创建目录遇PermissionError: [Errno 13]权限拒绝问题求助

Android 外部存储创建目录 PermissionError 解决指南

问题核心原因

Android 13(API 33)及以上版本彻底废弃了WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限对公共存储根目录的读写权限,即便你申请并获取了这些权限,直接在primary_external_storage_path()指向的公共根目录创建目录仍会被系统拦截,抛出PermissionError: [Errno 13] Permission denied。

具体解决办法

1. 适配Android 13+权限规则

  • 若你需要操作媒体文件(图片、音频、视频):

    • 在buildozer.spec中添加对应媒体权限:
      android.permissions = READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO
      
    • 代码中请求这些权限替代旧的存储权限:
      request_permissions([Permission.READ_MEDIA_IMAGES, Permission.READ_MEDIA_VIDEO, Permission.READ_MEDIA_AUDIO])
      
  • 若你要创建非媒体类目录:
    Android 13+禁止在公共存储根目录创建自定义目录,建议改用应用专属外部存储目录,路径示例:

    path = os.path.join(primary_external_storage_path(), "Android", "data", "com.your.app.package", "files")
    

    该目录属于应用私有空间,无需额外权限即可读写,其他应用无法访问。

2. 修正权限请求逻辑

request_permissions是异步操作,必须等待权限授予完成后再执行目录创建,避免代码提前执行导致权限未生效:

import os
from android.storage import primary_external_storage_path
from android.permissions import request_permissions, Permission, check_permission

def create_target_folder():
    path = primary_external_storage_path()
    Folder = 'example'
    dire = os.path.join(path, Folder)
    # 先判断目录是否存在,避免重复创建报错
    if not os.path.exists(dire):
        os.mkdir(dire)

def on_permission_granted(permissions, grants):
    if all(grants):
        create_target_folder()

# 先检查权限状态,未授予则请求
required_perms = [Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE]
if not all(check_permission(p) for p in required_perms):
    request_permissions(required_perms, on_permission_granted)
else:
    create_target_folder()

3. 更省心的替代方案:使用应用专属存储

如果不需要让其他应用访问你的目录,直接使用应用专属存储路径,完全绕开权限问题:

import os
from android.storage import app_storage_path

path = app_storage_path()
Folder = 'example'
dire = os.path.join(path, Folder)
if not os.path.exists(dire):
    os.mkdir(dire)

4. Buildozer配置补充

确保buildozer.spec中指定了适配的Android API版本:

android.api = 33
android.minapi = 21

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:10:21