有时获取安卓的SD卡,实际上是内置的。这个时候,怎样获取外置的路径呢?经常搜索,吾找到一个办法,共享给大家:
/**
* 获取外置卡(可拆卸的)的目录。
* Environment.getExternalStorageDirectory()获取的目录,有可能是内置卡的。
* 在高版本上,能访问的外置卡目录只能是/Android/data/{package}。
*/
public String getAppRootOfSdCardRemovable(Context context)
{
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
return null;
}
/**
* 这一句取的还是内置卡的目录。
* /storage/emulated/0/Android/data/net.quantum6.q6telcom/cache
* 神奇的是,加上这一句,这个可移动卡就能访问了。
* 猜测是相当于执行了某种初始化动作。
*/
StorageManager mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
try
{
Class<?> storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
Method getPath = storageVolumeClazz.getMethod("getPath");
Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
Object result = getVolumeList.invoke(mStorageManager);
final int length = Array.getLength(result);
for (int i = 0; i < length; i++)
{
Object storageVolumeElement = Array.get(result, i);
String path = (String) getPath.invoke(storageVolumeElement);
if ((Boolean) isRemovable.invoke(storageVolumeElement))
{
return path;
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
希望能给需要的朋友带来帮助。
祝大家健康顺利。