【问题标题】:Kivy - get the path to DCIM folder on any android deviceKivy - 在任何安卓设备上获取 DCIM 文件夹的路径
【发布时间】:2017-07-16 22:28:24
【问题描述】:

我想确切地知道如何使用 Kivy 在 android 上获取 DCIM 文件夹的路径。

PyJinus 不是一个选项,因为它目前不适用于 Python 3.5

到目前为止我尝试的是:

DATA_FOLDER = os.getenv('EXTERNAL_STORAGE') if platform is 'android' else os.path.expanduser("~")

但这只会让我进入用户区。有什么想法吗?

【问题讨论】:

    标签: android python python-3.x kivy python-3.5


    【解决方案1】:

    使用user_data_dir,如果您打算将sdcard用作应用程序的存储空间,请使用user_data_dir变量创建一个文件夹:

    from kivy.app import user_data_dir
    from os.path import dirname, join
    join(dirname(user_data_dir), 'DCIM')
    

    或者直接使用它的code

    DCIM = join('/sdcard', 'DCIM')
    

    我认为/sdcard 只是指向真实文件夹(无论它在哪里)的符号链接,因此使用此路径只会在访问时获取值,例如到/storage/sdcard0(符号链接),或者直接到真实路径。


    除了那些解决方案之外,android 在环境中具有您在以下位置注意到的路径:

    • EXTERNAL_STORAGE (/storage/emulated/legacy) 再次符号链接到 SD 卡
    • SECONDARY_STORAGE (/storage/extSdCard) 即用于存储照片的外部卡
    • EMULATED_STORAGE_TARGET (/storage/emulated) 基本上是您 sdcard 的父文件夹,其中真正的 sdcard(对我而言)在 /storage/extSdCard/emulated/0

    【讨论】:

    • 谢谢,我不确定实际路径是什么,这真的很有帮助
    • @Nick 您可以随时使用adb shell(它的行为类似于 bash)或Root Browser 进行检查。即使没有 root 权限,根浏览器也应该可以作为简单的文件阅读器(取决于设备)工作,它会告诉您设备有哪些路径。注意 lrwxrwxrwx 文件的签名,它甚至有一个不同的图标 - 那是一个符号链接。
    【解决方案2】:

    将此路径 PATH 用于您必须保存文件的位置。我想通过这种方式访问​​安卓存储。

    首先,从 kivy.utils 导入平台

    from kivy.utils import platform
    

    其次,使用这组代码获取DCIM的路径

        PATH = '.'
        if platform == 'android':
            from android.permissions import request_permissions, Permission
            request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE])
            app_folder = os.path.dirname(os.path.abspath(__file__))
            PATH = "/storage/emulated/0/DCIM"
    

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2015-01-01
      • 2012-06-12
      • 2016-04-12
      • 2016-10-01
      相关资源
      最近更新 更多