Android获取内置、外置以及OTG等方式挂载的存储设备路径

原创 2015年07月10日 11:50:23

众所周知,谷歌提供给了我们获取android内置存储卡的绝对路径的方法,但是如果要获取外置的存储的路径的话,谷歌就没有提供了。我们需要自己去写方法来获取这些路径,比如外置的tf卡,OTG挂载的U盘等。

那么采用什么方法呢,android说白了也就是一种linux系统,采用的是linux的内核。而linux中挂载存储设备使用的是 mount 命令来挂载设备到文件系统中。如:

mount -rw /dev/mmcblock0 /mnt

就是将设备存储卡以可读写的方式挂载到了/mnt目录下,此后访问/mnt就是访问存储卡的内容。又如用的最常用的挂载windows下的文件夹到linux虚拟机中(Virtual Box):

root@tony-laptop:~# mount -t vboxsf SHARE /media/sf_SHARE/
root@tony-laptop:~# mount | grep SHARE
SHARE on /media/sf_SHARE/ type vboxsf (rw)
后面敲入mount查看到F盘的SHARE目录已经被挂载到/media/sf_SHARE下,也可以查看到SHARE里的文件。安卓采用的也是这种方式,于是我们可以通过查看mount命令的输出来获取所挂载的路径是什么。下面直接上代码,代码中都有注释。


/**
	 * 获取手机系统中所有被挂载的TF卡,包括OTG等
	 * 
	 * @return
	 */
	public static List<String> getAllExterSdcardPath()
	{
		List<String> SdList = new ArrayList<String>();

		String firstPath = Environment.getExternalStorageDirectory().getPath();

		try
		{
			Runtime runtime = Runtime.getRuntime();
			// 运行mount命令,获取命令的输出,得到系统中挂载的所有目录
			Process proc = runtime.exec("mount");
			InputStream is = proc.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			String line;
			BufferedReader br = new BufferedReader(isr);
			while ((line = br.readLine()) != null)
			{
				Log.d("", line);
				// 将常见的linux分区过滤掉

				if (line.contains("proc") || line.contains("tmpfs") || line.contains("media") || line.contains("asec") || line.contains("secure") || line.contains("system") || line.contains("cache")
						|| line.contains("sys") || line.contains("data") || line.contains("shell") || line.contains("root") || line.contains("acct") || line.contains("misc") || line.contains("obb"))
				{
					continue;
				}

				// 下面这些分区是我们需要的
				if (line.contains("fat") || line.contains("fuse") || (line.contains("ntfs")))
				{
					// 将mount命令获取的列表分割,items[0]为设备名,items[1]为挂载路径
					String items[] = line.split(" ");
					if (items != null && items.length > 1)
					{
						String path = items[1].toLowerCase(Locale.getDefault());
						// 添加一些判断,确保是sd卡,如果是otg等挂载方式,可以具体分析并添加判断条件
						if (path != null && !SdList.contains(path) && path.contains("sd"))
							SdList.add(items[1]);
					}
				}
			}
		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if (!SdList.contains(firstPath))
		{
			SdList.add(firstPath);
		}

		return SdList;
	}
}



在使用过程中,可能会因为安卓手机厂家太多,ROM太多,判断条件不准确的时候,这就需要针对一些机型来添加具体的判断条件来确保能够把所需要的路径全读出来。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 获取外接储存的设备路径(如挂载的U盘)

插入U盘时获取U盘路径 开机时获取挂载U盘的路径
  • Zou_pl
  • Zou_pl
  • 2017年06月26日 20:05
  • 3628

android6.0获取OTG

最近项目中遇到了获取android OTG 路径安装以前的方法无法获取的问题,原来在android6.0已经改变了外置sd卡和u盘的挂载方式,改为自动挂载,所以之前的方法是无法获取的了。 通过查看系...
  • baidu_35578313
  • baidu_35578313
  • 2016年07月12日 10:12
  • 3368

Android6.0 otg插入U盘 流程

转自 http://blog.csdn.net/kc58236582/article/details/50577333——看看这两篇文章,也许能解决U盘不能在es 文件浏览器看见的问题 之前分析过...
  • lqxandroid2012
  • lqxandroid2012
  • 2017年05月03日 11:45
  • 1366

Android 存储挂载监听 U盘挂载监听

xml 清单文件中的配置方式 ...
  • SeeyouMT
  • SeeyouMT
  • 2016年10月21日 13:52
  • 1111

Android6.0 otg插入U盘 流程

之前分析过vold插入sd卡的流程,本以为otg插入U盘与sd卡走的流程一样。想不到还是有差别的,下面我们来分析下: 一、kAdoptable flag 先来看otg插入卡,后handle...
  • kc58236582
  • kc58236582
  • 2016年01月25日 09:44
  • 9769

Android OTG 读写U盘文件

最近项目需要做一个关于OTG的功能,其实也就使用到U盘的文件读取,一般这种需求是不需要的,因为大部分的系统都会自动挂载U盘,但是个别系统还是需要自己去实现,查了很多资料都没有找到一个完整的能用的例子,...
  • csdn635406113
  • csdn635406113
  • 2017年04月12日 18:29
  • 5891

Android4.0 USB挂载内核驱动层流程分析(一)

1.platform_device 在arch/arm/mach-msm/Board-xx.c中: static struct platform_device android_usb_device ...
  • airk000
  • airk000
  • 2012年08月20日 17:59
  • 8709

MTP in Android详解

 MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议。Android从3.0开始支持MTP。 不过,在今天的智能手机领域内,G...
  • kc58236582
  • kc58236582
  • 2016年02月03日 10:33
  • 852

OTG – Android USB Hos

前几天研究了一下Android上OTG的功能。 OTG在Android3.1及以上被支持。也就是minSdkVersion为12. API概述 UsbManager 允许您枚举已连接的...
  • tianruxishui
  • tianruxishui
  • 2014年07月17日 13:45
  • 14539

Android设备与外接U盘实现数据读取操作

现在越来越多手机支持OTG功能,通过OTG可以实现与外接入的U盘等USB设备实现数据传输。关于OTG,可以参考: http://blog.csdn.net/srw11/article/details/...
  • true100
  • true100
  • 2017年09月01日 17:38
  • 3525
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android获取内置、外置以及OTG等方式挂载的存储设备路径
举报原因:
原因补充:

(最多只允许输入30个字)