1. 苏葳的备忘录首页
  2. 开发工具

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路径问题。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/513.html

发表评论

邮箱地址不会被公开。 必填项已用*标注