判断外置存储
public static final String KEY_WRITE_DISK_ITEM = "/storage/";
private static final String USB_STORAGE_PATH = "/mnt/usbotg";
mExternalSDPath = StorageManagerEx.getExternalStoragePath();
if (path.equals(mExternalSDPath)) {
preference.setOrder(ORDER_SD_CARD);
// TODO: Replace with Environment.DIRECTORY_USBOTG
} else if (path.startsWith(USB_STORAGE_PATH)) {
preference.setOrder(ORDER_USB_OTG);
} else {
preference.setOrder(ORDER_PHONE_STORAGE);
}
StorageManagerEx 是mtk写的一个Storage方面的扩展类。用于外置存储,获取默认路径等等。
而高通的处理方式:
path:
Environment.getExternalStorageDirectory().toString() + File.separator
+ context.getResources().getString(R.string.folder_name);
if (context.getResources().getBoolean(R.bool.config_storage_path)) {
mStoragePath = StorageUtils.applyCustomStoragePath(context);
}
public static String getSdStoragePath(Context context) {
return StorageUtils.getSdDirectory(context) + File.separator + FOLDER_NAME;
}.
private static final int VOLUME_SDCARD_INDEX = 1;
private static String getSdDirectory(Context context) {
if (sSdDirectory == null) {
try {
StorageManager mStorageManager =
(StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
final StorageVolume[] volumes = mStorageManager.getVolumeList();
if (volumes.length > VOLUME_SDCARD_INDEX) {
StorageVolume volume = volumes[VOLUME_SDCARD_INDEX];
if (volume.isRemovable()) {
sSdDirectory = volume.getPath();
}
}
} catch (Exception e) {
Log.e(TAG, "couldn't talk to MountService", e);
}
}
return sSdDirectory;
}
相对比高通方式更加通用,在mtk android代码中也可以使用,不过mtk写好的api更方便。
关于外置存储,mtk的path是将/storage/(uuid_id)方式在vold层中做了一次软连接,目录映射成了/storage/sdcard1 。
而高通还是/storage/(uuid_id) ,每个sdcard都会不同path。