android通过反射获取内置外置存储器列表

我们知道android上一般都有外置的存储卡,

但是通过Environment.getExternalStorageDirectory()获取的是内置的存储卡位置

(也有的手机可以在系统中修改默认存储)

那么如何获取外置存储卡的位置呢?

我在参考了android上通过反射,获取存储器列表

后发现可以通过反射来获取

StorageManager中有几个共有的方法被标识为@hide,可能出于安全考虑?

比如,getVolumePaths,getVolumeList所以用不了,

而反射可以做到,

具体代码如下

		StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
		try {
			Class<?>[] paramClasses = {};
			Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", paramClasses);
			getVolumePathsMethod.setAccessible(true);
			Object[] params = {};
			Object invoke = getVolumePathsMethod.invoke(storageManager, params);
			for (int i = 0; i < ((String[])invoke).length; i++) {
				System.out.println(((String[])invoke)[i]);
			}
		} catch (NoSuchMethodException e1) {
			e1.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}

还有点问题就是 无法区分内置卡和外置卡

你可能感兴趣的:(android,存储)