Android5.X和Android6.X上读写外置 USB设备的方案
2016-06-07 21:40
603 查看
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.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;
}
相关文章推荐
- 三星建议客户定期对智能电视进行杀毒扫描
- BootISO:从 ISO 文件中创建一个可启动的 USB 设备
- 破墙而入看电视
- 很好很强大,很黄很暴力
- android USB如何修改VID具体实现
- 用vbs确定计算机是否有 USB 2.0 端口的代码
- Android中查看USB连接的外接设备信息的代码实例
- C#获取USB事件API实例分析
- 用u盘安装操作系统
- 月光微博客
- 给产品经理讲技术丨五分钟理解什么是接口
- 看清“电视购物”的真实面目
- 从usb启动安装linux
- 利用4G U盘安装Fedora Linux
- virtualbox usb
- 用组策略彻低禁止USB存储设备、光驱、软驱、ZIP软驱
- usb禁用原理
- 2014年8月31日网摘内容
- USB有关的编程
- 广电总局叫停违规网站 网络电视新规年底出台