«

»

kivy中如何取得Android手机的sdcard位置?

kivy android python用Kivy框架写个Android程序,要操作sdcard上的文件,问题是,Android各家随意定制,机型众多,如何取得某款Android手机的sdcard位置?本人的盛大Bambook S1手机上,sdcard位置是/mnt/sdcard。由于S1并不能插外置sdcard,所以这其实是内置的sdcard地址。而另一款酷派7295上,这个位置却是/storage/sdcard1上,该手机还能插外置卡,所以外置卡的位置,是否就是/storage/sdcard2?

通常用Java开发的Android apk上,可以用系统方法取得指向sdcard的环境变量值。但python如何操作呢?android系统中是否有一个系统变量,可以让os.environ.get(‘变量名’)来取得该值呢?查了半天,没有结果。翻看kivy文档,结果在app对象中发现一个属性:user_data_dir。此属性的定义是,取得用户目录的路径。但在android上,其返回值就是/sdcard/程序名。好吧看到sdcard了。来测试一下。

在kivy程序的主app类中用os.path.dirname(self.user_data_dir)中取得值,显示出来,的确是/sdcard。等等,记得我手机的sdcard路径是/mnt/sdcard啊,怎么不一样?用re管理器看看到底怎么回事。到手机根目录下,查看/sdcard的内容,发现与/mnt/sdcard是一致的。有点unix常识的,就会想到这个sdcard目录是否只是/mnt/sdcard的一个链接,查看/sdcard的属性,果然链接到/mnt/sdcard。这下明白了。

最后决定还是用os.path.dirname(self.user_data_dir)来获取sdcard路径,希望能解决不同安卓机型的sdcard路径问题。但还有疑问,只要某款手机有内置或外置闪存,是否系统根目录下都有一个/sdcard链接到闪存文件系统上,这个链接是否就象/data或/system一样是肯定存在的?如果真是这样的话,岂不是可以固定访问/sdcard就可以了?没有深入研究过android,还真不敢下这个结论。总之将这个程序拿回去到酷派7295上测试一下,看是否解决了不同机型的sdcard路径问题。

1 星2 星3 星4 星5 星 (尚无评分)
Loading...Loading...

相关文章

Kivy编译成apk后在Android手机上的日志位置 在电脑上写好一个kivy程序,编译成apk后拷至手机,运行,出现kivy启动界面,随即退出。怎么查找错误原因...
Ubuntu 12.10的VMware虚拟机中连接Android手机调试 用kivy框架开发python for android程序时,由于kivy的显示依赖于opengl es图形库,而开发环境虚拟机(Ub...
kivy中widget的中文字体显示 Python的图形界面跨平台框架Kivy使用比较方便,虽稍欠成熟,但再发展几年或许真能在移动应用开发上大发...
Android上的脚本语言解释环境 Android算是Linux的一个派生版本,其上能否运行Linux上各种各样的脚本语言呢?搜索了一下网络,居然发现...
Python中shutil.copytree的权限错误问题 Python的高级文件操作模块shutil提供了许多功能强大,使用方便的函数,比如copytree这样一个函数,然而p...
Python的SWIG,ctypes等与C的互操作性 在许多情况下,Python能够调用C模块或者C里面调用Python解释器是非常有用的,语言之间取长补短有助于更...
PyDev安装及Remote Systems Explorer的安装 在RHEL 5.5上开发Python程序,UE自带Python的语法高亮,本来也足够用了。用UE的ftp功能远程编辑RHEL上的...
Python访问Oracle数据库的方法 终于有时间来安装Python访问Oracle的模块。在网上搜索,使用最多的大约是cx_Oracle这个模块。 下载链接h...

发表评论

电子邮件地址不会被公开。