概述
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设备的方案的全部内容,希望文章能够帮你解决Android5.X和Android6.X上读写外置 USB设备的方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复