有時擷取安卓的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;
}
希望能給需要的朋友帶來幫助。
祝大家健康順利。