Android5.X和Android6.X上读写外置 USB设备的方案
来源:互联网 发布:数据分析师专业 编辑:程序博客网 时间:2024/05/16 07:06
Android5.X和Android6.X上对于Mount USB设备做了很大的变更,所以要获取USB的Mount路径的方法和读写权限也有很大不同
Android5.0系统下, USB设备被mount的路径为以下,以此类推
/storage/sda1
/storage/sdb1
/storage/sdc1
Android5.0系统下,USB中所有路径都有读写权限,当然manifest中android.permission.READ_EXTERNAL_STORAGE, android.permission.WRITE_EXTERNAL_STORAGE权限记得加上
public void getUsbPath() {
private StringUSB_DEVICE_FILTER = "/storage/sd";
private ArrayList<String> usb_list;usb_list = new ArrayList<String>();
usb_list.clear();
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(USB_DEVICE_FILTER)) { //通过路径名过滤真正的USB设备
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
usb_list.add(columns[1].trim());
}
Log.d(TAG,"storage "+line);
}
}
} catch (Exception e) {
e.printStackTrace();
}
Log.i(TAG, "finally,usb_list.size()=" + usb_list.size()); //可以支持读取多个USB设备,使用USB HUB外接也可以
}
Android6.0系统下, USB设备被mount的路径为 /storage/xxxx-xxxx/ (这个xxxx-xxxx是USB设备id,每个设备都不同)
Android6.0系统下, 只能在USB下指定路径 /Android/data/PackageName/files下才有写权限,读权限倒是所有路径都可以
File[] files = getExternalFilesDirs(null); //call this code to auto create /storage/XXXX-XXXX/Android/data/PackageName/files
Log.v(TAG, "files.length=" + files.length);
File usbFile = null;
for(int i = 0; i < files.length; i++){
Log.v(TAG, "files[" + i + "].getPath()=" + files[i].getPath());
if(files[i].getPath().indexOf("emulated") >= 0){
continue; // /storage/emulated/0/Android/data/PackageName/files is not USB path, so skip
}
else{
usbFile = files[i]; //如果机器上插了多个U盘,其实可以取得多个USB路径,这里只取第一个
break;
}
}
if(usbFile != null) {
Log.v(TAG, "usbFile.getPath=" + usbFile.getPath());
Toast.makeText(getApplicationContext(), "usbFile.getPath=" + usbFile.getPath(),Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplicationContext(), "No USB device found",Toast.LENGTH_SHORT).show();
return;
}
- Android5.X和Android6.X上读写外置 USB设备的方案
- android4.x外置sd读写操作
- Android5.X
- Android5.x上运行ARM架构程序
- Android5 和Android6.0 的区别
- Android5.x新特性之 Toolbar和Theme的使用
- Android5.x新特性之 Toolbar和Theme的使用
- Android5.x新特性之 Toolbar和Theme的使用
- Android5.x新特性之 Toolbar和Theme的使用
- android5.x的 Ripple和Reveal动效
- Android5.x新特性之 Toolbar和Theme的使用
- Android5.0后外置SDCard读写
- Android5.x Toolbar和Palette应用解析
- Android5.X (五) : Activity的跳转效果
- Android5.0 与 4.x的不同
- Android5.X对图形操作上有更多的功能。下面来看看Tinting(着色)
- Android5.X (三) : CardView
- Android5.x 学习
- 多线程和多进程的区别(小结)
- C/C++ 中缀表达式转换成后缀表达式并求值
- <%= %>、<% %>、<%@ %>、<%:%>和<%# %>的区别
- 【REACT NATIVE 系列教程之十三】利用LISTVIEW与TEXTINPUT制作聊天/对话框&&获取组件实例常用的两种方式
- Windows服务代码控制安装卸载、启动停止
- Android5.X和Android6.X上读写外置 USB设备的方案
- 动态规划1-数字三角形(算法基础 第4周)
- 【转】【复】实现复数中的运算符重载
- 科普:x64与IA64
- intellij的maven工程"Server IPC version 9 cannot communicate with client version"错误的解决办法
- Leetcode Max Points on a Line
- oop概念性讲解
- 在web.xml中配置diaplay-name是什么意思
- Activity的生命周期(基础篇)