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

KivyMD开发Android应用:媒体权限与文件选择器仅显文件夹问题

解决KivyMD Android应用的权限与文件选择器问题

一、修复媒体访问权限未触发的问题

  1. 配置AndroidManifest.xml
    必须在项目的AndroidManifest.xml中声明所需权限,否则动态申请不会弹出授权窗口:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
    
    • Android 12及以下版本依赖READ_EXTERNAL_STORAGE
    • Android 13及以上版本需使用READ_MEDIA_IMAGES
  2. 完善动态权限申请流程
    仅在on_start中调用申请逻辑不够,需处理权限回调结果,确认权限是否成功授予:

    from kivy.utils import platform
    from kivymd.app import MDApp
    
    class ImagePickerApp(MDApp):
        def on_start(self):
            if platform == 'android':
                from android.permissions import request_permissions, Permission
                request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.READ_MEDIA_IMAGES])
    
        def on_request_permissions_result(self, permissions, grants):
            for perm, granted in zip(permissions, grants):
                if not granted:
                    print(f"{perm} 权限被拒绝,无法访问媒体文件")
                    # 可在此处添加弹窗引导用户前往设置开启权限
    

二、让FileChooserIconView显示所有文件

  1. 确认权限已成功获取
    权限未授予时,FileChooser没有读取文件的权限,只会显示文件夹,需先通过on_request_permissions_result确认权限状态。

  2. 配置FileChooser核心属性
    在KV语言或Python代码中调整以下属性:

    MDBoxLayout:
        orientation: "vertical"
        FileChooserIconView:
            id: file_chooser
            # 允许选择文件(设为True则只能选文件夹)
            dirselect: False
            # 清空过滤器,显示所有文件
            filters: []
            # 初始路径设为手机外部存储根目录
            path: "/storage/emulated/0/" if platform == 'android' else "."
    
  3. 获取标准外部存储路径(可选)
    为避免路径错误,可通过Android API获取官方外部存储路径:

    if platform == 'android':
        from android.storage import primary_external_storage_path
        self.root.ids.file_chooser.path = primary_external_storage_path()
    

额外注意事项

  • 若用户拒绝权限后无法再次触发申请,需引导用户前往应用设置手动开启
  • Android 13+中READ_MEDIA_IMAGES仅能访问图片,如需视频、音频需额外申请READ_MEDIA_VIDEO、READ_MEDIA_AUDIO权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:32:02