Environment.getExternalStorageState () и Environment.getExternalStorageDirectory () предоставят встроенную SD-карту, которая сейчас практически существует на всех устройствах Android на данный момент.
Два способа получить «реальную» внешнюю SD-картукарта (или USB-диск).
Используйте функцию getVolumeList () для вывода списка всех съемных хранилищ, не забудьте проверить состояние монтирования перед тем, как получить к нему доступ.
private static String getExtendedMemoryPath(Context context) {
StorageManager mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
Class<?> storageVolumeClazz = null;
try {
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);
boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
if (removable) {
return path;
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
Зарегистрируйте событие android.intent.action.MEDIA_MOUNTED, когда хранилище смонтировано, передаст это намерение с подключенным путем к диску.
<receiver android:enabled="true" android:name=".MountStatusReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
<data android:scheme="file"/>
</intent-filter>
</receiver>
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
if (Intent.ACTION_MEDIA_MOUNTED.equals(intent.getAction())) {
path = intent.getDataString().replace("file://", "");
}
}
}
}