【问题标题】: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"