android如何获取机身存储位置

aotian16 2013-07-11 03:23:53
外部存储卡可以用Environment.getExternalStorageDirectory()获取到,
但是机身存储位置如何获取呢?

...全文
6559 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
吴朗 2014-12-20
  • 打赏
  • 举报
回复
引用 14 楼 yfsyy 的回复:
[quote=引用 13 楼 yfsyy 的回复:] [quote=引用 12 楼 yfsyy 的回复:] [quote=引用 8 楼 guoyoulei520 的回复:] [quote=引用 6 楼 aotian16 的回复:] 找了很久,发现可以通过反射获取存储器列表 但是不知道哪个才是内置存储器
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();
		}
0内置 1外置 结贴吧 [/quote]8楼说的是正确的,Environment.getExternalStorageDirectory()获取到的不一定是内置的,这句代码获取到的是默认存储位置,如果把默认存储位置改为sdcard,那么获取到的就是/storage/sdcard/1/..默认存储位置是内置的,获取到的是/storage/emulator/0/ 单词可能写错,勿介。。。[/quote] 我写错了,是/storage/sdcard1和/storage/emulated/0[/quote] 再补充一点,我是在4.2的系统下测试的,华为手机。[/quote] 华为C8813,测试,/storage/sdcard0和/storage/sdcard1,根据手机上默认存储位置设置的不同,/storagr/sdcard0可能是内置的,也可能是外置的。有没有办法可以找到真正sd卡的位置???
yfsyy 2014-08-25
  • 打赏
  • 举报
回复
引用 13 楼 yfsyy 的回复:
[quote=引用 12 楼 yfsyy 的回复:] [quote=引用 8 楼 guoyoulei520 的回复:] [quote=引用 6 楼 aotian16 的回复:] 找了很久,发现可以通过反射获取存储器列表 但是不知道哪个才是内置存储器
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();
		}
0内置 1外置 结贴吧 [/quote]8楼说的是正确的,Environment.getExternalStorageDirectory()获取到的不一定是内置的,这句代码获取到的是默认存储位置,如果把默认存储位置改为sdcard,那么获取到的就是/storage/sdcard/1/..默认存储位置是内置的,获取到的是/storage/emulator/0/ 单词可能写错,勿介。。。[/quote] 我写错了,是/storage/sdcard1和/storage/emulated/0[/quote] 再补充一点,我是在4.2的系统下测试的,华为手机。
yfsyy 2014-08-25
  • 打赏
  • 举报
回复
引用 12 楼 yfsyy 的回复:
[quote=引用 8 楼 guoyoulei520 的回复:] [quote=引用 6 楼 aotian16 的回复:] 找了很久,发现可以通过反射获取存储器列表 但是不知道哪个才是内置存储器
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();
		}
0内置 1外置 结贴吧 [/quote]8楼说的是正确的,Environment.getExternalStorageDirectory()获取到的不一定是内置的,这句代码获取到的是默认存储位置,如果把默认存储位置改为sdcard,那么获取到的就是/storage/sdcard/1/..默认存储位置是内置的,获取到的是/storage/emulator/0/ 单词可能写错,勿介。。。[/quote] 我写错了,是/storage/sdcard1和/storage/emulated/0
yfsyy 2014-08-25
  • 打赏
  • 举报
回复
引用 8 楼 guoyoulei520 的回复:
[quote=引用 6 楼 aotian16 的回复:] 找了很久,发现可以通过反射获取存储器列表 但是不知道哪个才是内置存储器
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();
		}
0内置 1外置 结贴吧 [/quote]8楼说的是正确的,Environment.getExternalStorageDirectory()获取到的不一定是内置的,这句代码获取到的是默认存储位置,如果把默认存储位置改为sdcard,那么获取到的就是/storage/sdcard/1/..默认存储位置是内置的,获取到的是/storage/emulator/0/ 单词可能写错,勿介。。。
顾小林 2013-07-22
  • 打赏
  • 举报
回复
mark 一下
aotian16 2013-07-22
  • 打赏
  • 举报
回复
0内置 1外置 这个说法不一定啊 比如我的手机可以设置为将外置存储卡设置为默认存储卡 这样0就是外置了 呵呵 多谢了
凉凉二点凉 2013-07-22
  • 打赏
  • 举报
回复
可以反射这个方法 getVolumePaths得到路经
凉凉二点凉 2013-07-22
  • 打赏
  • 举报
回复
引用 6 楼 aotian16 的回复:
找了很久,发现可以通过反射获取存储器列表 但是不知道哪个才是内置存储器
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();
		}
0内置 1外置 结贴吧
aotian16 2013-07-22
  • 打赏
  • 举报
回复
引用 3 楼 guoyoulei520 的回复:
getExternalStoragePublicDirectory
这是内部的啊 外部的话 StorageVolume是这个啊
对了,StorageVolume我找到了,但是它是被隐藏的
aotian16 2013-07-22
  • 打赏
  • 举报
回复
找了很久,发现可以通过反射获取存储器列表 但是不知道哪个才是内置存储器
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();
		}
顾小林 2013-07-12
  • 打赏
  • 举报
回复
http://developer.android.com/guide/topics/data/data-storage.html#filesInternal 可以参考一下 不知道是否是你想要的答案
aotian16 2013-07-11
  • 打赏
  • 举报
回复
引用 3 楼 guoyoulei520 的回复:
getExternalStoragePublicDirectory
这是内部的啊 外部的话 StorageVolume是这个啊
查了下,getExternalStoragePublicDirectory是取得共用存储点,比如音乐,图片等的吧 StorageVolume没查到是什么东西?
凉凉二点凉 2013-07-11
  • 打赏
  • 举报
回复
getExternalStoragePublicDirectory
这是内部的啊 外部的话 StorageVolume是这个啊
aotian16 2013-07-11
  • 打赏
  • 举报
回复
写死不行啊, 因为要处理多种机器, 有可能路径不同
  • 打赏
  • 举报
回复
机身位置可以自己写死啊,它基于linux系统的,比如你要定位到自己的应用就/data/data/com.abc

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧