问题描述
我正在使用此代码访问SD card
:
import os
from os.path import join
from jnius import autoclass
#from android.permissions import request_permissions,Permission
#request_permissions([Permission.WRITE_EXTERNAL_STORAGE,# Permission.READ_EXTERNAL_STORAGE])
Environment = autoclass('android.os.Environment')
self.working_directory = os.path.join(Environment.getExternalStorageDirectory().getAbsolutePath(),"my_app_dir")
if not os.path.exists(self.working_directory):
os.makedirs(self.working_directory)
但是,我注意到数据仅在内部SD卡上创建。如何访问可移动电话SD卡以及需要哪些权限(我需要在此处读写)?我的数据很大,因此我需要将其保存在可移动SD卡上。
解决方法
首先,“外部存储”与“可移动存储”不同。外部存储器基本上是defined by Google originally,例如“并非总是可访问的存储器”。因为它是通过USB安装到PC上的。可以肯定地说,自Android 4起,此概念就具有lost most of the meaning。
系统实际使用哪种存储方式,因为“外部”是设备制造商的completely up。您不应假定它是可移动媒体。您既不应该假定可移动媒体具有更多的可用存储空间,也不应该甚至存在于系统中。
但是,如果存在 ,则根据您的情况is to use plot(x,y)
处理它的正确方法。然后,此方法将返回需要迭代的多个路径,并检查Context.getExternalFilesDirs()
以确定哪个目录具有更多可用存储空间。
(提示:在具有可移动SD卡的典型手机上,File.getFreeSpace()
返回的列表中的第二项是probably可移动媒体,但这是一个肮脏的骇客。)
一种现代的方法是研究存储访问框架,这里是the documentation。