如何在 Android 10 尤其是三星手机上获取可移动存储(可移动 SD 卡)的路径。由于可移动存储的位置现在是格式 /storage/???? ???我发现很难找到路径,因为它随每部手机而变化。
我也在发布解决方案,它在三星和小米手机上运行良好。
如何在 Android 10 尤其是三星手机上获取可移动存储(可移动 SD 卡)的路径。由于可移动存储的位置现在是格式 /storage/???? ???我发现很难找到路径,因为它随每部手机而变化。
我也在发布解决方案,它在三星和小米手机上运行良好。
在每部手机或模拟器上,您都可以通过使用
getExternalFilesDirs()
每个使用的 micro sd 卡的路径都不同。
我想分享一个我花了几天时间才找到的解决方案,希望也能帮助其他人。最新安卓版本的可移动sd卡存储就像“/storage/????????”,这个位置很难找到。我从这里找到了以下代码: 即使在三星手机上,此代码也有助于获得正确的位置。我在三星和小米手机上试过。
/**
使用反射获取外部 sd 卡路径
@param mContext
@param is_removable 是可移动的外部存储
@返回 */
private static String getExternalStoragePath(Context mContext, boolean is_removable) {
StorageManager mStorageManager = (StorageManager) mContext.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 (is_removable == 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;
}