android 关于读取SD卡或者U盘的一些方法

           最近做的项目牵涉到读取设备外置SD卡,据说不同设备外置SD卡路径是不一样的,这跟各家芯片厂商写底层的程序员有关,不同厂家或者不同程序员,路径搞的就不一样了 ,所以查了写资料,稍微整理下;然后还有USB设备,据说也是这种情况。

          我们常用的读取SD卡方法,也是默认读取设备内置的SD卡方法,如:

       

/*
	 * 获得SD卡目录,默認內置的
	 */
	public String getSDPath(Context context) {
		String sdDir = null;
		boolean sdCardExist = Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
		if (sdCardExist) {
			sdDir = Environment.getExternalStorageDirectory().toString();// 获取跟目录
		} else {
			// sdDir = context.getFilesDir().getParent();
			sdDir = null;
		}
		return sdDir.toString();

	}
    这个方法得到的目录是:/mnt/sdcard,这个是android设备默认的SD卡目录,也是内置的。

   下面来帖一个读取外置SD卡路径的方法,本人觉得很好用,不仅能读取SD卡,USB设备也可以的。

    

/*
	 * 尝试获取当前外置SD卡路径
	 * 
	 * 04-15 17:16:45.409: I/外置SD卡路径(10395):
	 */
	// */mnt/private
	// */mnt/sdcard
	// */mnt/extsd

	public String getOutSDPath() {
		String mount = new String();

		try {
			Runtime runtime = Runtime.getRuntime();
			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) {
				if (line.contains("secure"))
					continue;
				if (line.contains("asec"))
					continue;

				if (line.contains("fat")) {
					String columns[] = line.split(" ");
					if (columns != null && columns.length > 1) {
						mount = mount.concat("*" + columns[1] + "\n");
					}
				} else if (line.contains("fuse")) {
					String columns[] = line.split(" ");
					if (columns != null && columns.length > 1) {
						mount = mount.concat(columns[1] + "\n");
					}
				}
			}
			Log.i("外置SD卡路径", mount);

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return mount;
	}

   如果你不插TF卡或者U盘,会获取

*/mnt/private

*/mnt/sdcard 这两个路径


如果插上SD卡或者TF卡,会获取

*/mnt/private

*/mnt/sdcard

*/mnt/extsd 这三个路径,很明显,/mnt/extsd 这个就是外置SD卡路径,但不同设备可能不太一样,你可以尝试


 如果只插上 USB设备,会获取

*/mnt/private

*/mnt/sdcard

*/mnt/usbhost0 这个usb设备如果有多个接口的话,可能是/mnt/usbhost1,2,3...... 

很明显,/mnt/usbhost0 这个就是外置USB设备路径,但不同设备可能不太一样,你可以尝试

 如果U盘跟SD卡都插上,嘿嘿,你猜

帖张图片吧,这个只针对我的设备,应该能稍微加深点理解 

还有,有可能你虽然获得了外置SD卡路径,但你有时会发现不能往里面写数据!

这个可能是你系统版本有点小高,可以试试下面方法:

添加外置卡的写入权限 RE管理器,用文本编辑器打开/system/etc/permissions目录下的“platform.xml”文件(挂载读写),在 <permission

name="android.permission.WRITE_EXTERNAL_STORAGE" > < group gid="sdcard_rw" /> 下面添一行 <group gid="media_rw" />(注意段首对齐,"media_rw"和/>之间有

空格)保存并退出,重启系统就可以了!

这些主要是给迷途的人儿参考参考,望你们早日脱离苦海,希望能有所帮助。













  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值