0

如何在 Android 10 尤其是三星手机上获取可移动存储(可移动 SD 卡)的路径。由于可移动存储的位置现在是格式 /storage/???? ???我发现很难找到路径,因为它随每部手机而变化。

我也在发布解决方案,它在三星和小米手机上运行良好。

4

2 回答 2

1

在每部手机或模拟器上,您都可以通过使用

getExternalFilesDirs()

每个使用的 micro sd 卡的路径都不同。

于 2020-09-14T08:24:58.110 回答
-1

我想分享一个我花了几天时间才找到的解决方案,希望也能帮助其他人。最新安卓版本的可移动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;
    

    }

于 2020-09-13T19:31:08.037 回答