android 关于读取SD卡或者U盘的一些方法
2014-04-24 09:17
330 查看
最近做的项目牵涉到读取设备外置SD卡,据说不同设备外置SD卡路径是不一样的,这跟各家芯片厂商写底层的程序员有关,不同厂家或者不同程序员,路径搞的就不一样了 ,所以查了写资料,稍微整理下;然后还有USB设备,据说也是这种情况。
我们常用的读取SD卡方法,也是默认读取设备内置的SD卡方法,如:
下面来帖一个读取外置SD卡路径的方法,本人觉得很好用,不仅能读取SD卡,USB设备也可以的。
如果你不插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"和/>之间有
空格)保存并退出,重启系统就可以了!
这些主要是给迷途的人儿参考参考,望你们早日脱离苦海,希望能有所帮助。
我们常用的读取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"和/>之间有
空格)保存并退出,重启系统就可以了!
这些主要是给迷途的人儿参考参考,望你们早日脱离苦海,希望能有所帮助。
相关文章推荐
- android 关于读取SD卡或者U盘的一些方法
- 关于android获取sd卡路径的方法
- Android学习札记24:收集到的一些关于解决Bitmap OOM内存溢出的方法
- Android弱网测试中关于网络检测的一些借鉴方法
- 关于Android主线程(ActivityThread)源代码分析以及一些特殊问题的非常规方法
- 关于Android中内存优化的一些方法
- 一些关于读取缓存和清理缓存的公共方法(适用于Acache和imageLoad,亲测)
- android编程实现sd卡读取数据库的方法
- 一些关于android SD卡的信息
- 关于Android加载图片时的OOM的一些解决方法和优化
- android 读取SD卡或者其他地方文件功能函数
- 关于android编程的curso对象 moveToNext()方法的一些理解
- Android实现读取SD卡下所有TXT文件名并用listView显示出来的方法
- 关于Android加载图片时的OOM的一些解决方法和优化
- 关于 Android Dex 方法限制的一些总结
- Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识
- 关于android webview读取js全局变量或者函数返回值
- Android 关于getSystemService()方法的一些常用服务
- Android编程读取sd卡中图片的方法
- android通过usb读取U盘的方法