我是靠谱客的博主 怡然钢铁侠,最近开发中收集的这篇文章主要介绍Android5.X和Android6.X上读写外置 USB设备的方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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设备的方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部