欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中查看USB连接的外接设备信息的代码实例

程序员文章站 2022-06-04 12:16:31
1,usb存储设备(如:u盘,移动硬盘):  //usb存储设备 插拔监听与 sd卡插拔监听一致。复制代码 代码如下: private usbbroa...

1,usb存储设备(如:u盘,移动硬盘):

 //usb存储设备 插拔监听与 sd卡插拔监听一致。

复制代码 代码如下:

 private usbbroadcastreceiver mbroadcastreceiver;

     intentfilter ifilter = new intentfilter();
       ifilter.addaction(intent.action_media_eject);
       ifilter.addaction(intent.action_media_mounted);
       ifilter.addaction(intent.action_media_removed);
       ifilter.addaction(intent.action_media_unmounted);

       ifilter.adddatascheme("file");
       mbroadcastreceiver = new usbbroadcastreceiver();
       registerreceiver(mbroadcastreceiver, ifilter);

private class usbbroadcastreceiver extends broadcastreceiver {
      @override
      public void onreceive(context context, intent intent) {
       string action = intent.getaction();

       if (action.equals(intent.action_media_eject)) {

          //usb设备移除,更新ui    
       } else if (action.equals(intent.action_media_mounted)) {

          //usb设备挂载,更新ui
        }
      }
 }

  //获得挂载的usb设备的存储空间使用情况

public static string getusbstorage(context context){
      // usb storage 

      //storage/udisk为usb设备在android设备上的挂载路径.不同厂商的android设备路径不同。

      //这样写同样适合于sd卡挂载。
      file path = new file("/storage/udisk");

      statfs stat = new statfs(path.getpath());
      long blocksize = stat.getblocksize();
      long totalblocks = stat.getblockcount();
      long availableblocks = stat.getavailableblocks();
      string usedsize = formatter.formatfilesize(context, (totalblocks-availableblocks) * blocksize);
      string availablesize = formatter.formatfilesize(context, availableblocks * blocksize);
      return usedsize + " / " + availablesize;//空间:已使用/可用的
 }


2,usb外接输入设备(如:键盘,鼠标,扫描枪)
复制代码 代码如下:

try {

     //获得外接usb输入设备的信息
     process p=runtime.getruntime().exec("cat /proc/bus/input/devices");
     bufferedreader in = new bufferedreader(new inputstreamreader(p.getinputstream()));
     string line = null;
     while((line = in.readline())!= null){
       string deviceinfo = line.trim();

       //对获取的每行的设备信息进行过滤,获得自己想要的。

     }  

    } catch (exception e) {
  // todo: handle exception
     e.printstacktrace();
    }


另:设备信息也可以通过 adb shell 进入执行  cat /proc/bus/input/devices看到。

usb外接输入设备信息打印如下:

复制代码 代码如下:

i: bus=0003 vendor=11c0 product=0030 version=0110
n: name="acrux usb keyboard"
p: phys=usb-0000:00:04.0-1.3/input1
s: sysfs=/devices/pci0000:00/0000:00:04.0/usb1/1-1/1-1.3/1-1.3:1.1/input/input3
u: uniq=
h: handlers=mouse1 event3
b: prop=0
b: ev=17
b: key=70000 0 0 0 0 0 0 0 0
b: rel=103
b: msc=10

i: bus=0003 vendor=11c0 product=0030 version=0110 这行信息会在android设备与usb设备数据交互的是否使用到。

关于usb外接设备如何与android设备数据数据交互的代码书写可以参考:

http://developer.android.com/guide/topics/connectivity/usb/index.html

n: name="acrux usb keyboard" 这行说明了外接的usb设备的名称。

p: phys=usb-0000:00:04.0-1.3/input1

s: sysfs=/devices/pci0000:00/0000:00:04.0/usb1/1-1/1-1.3/1-1.3:1.1/input/input3

这两行可用于识别该usb设备连接在android设备的哪一个usb口.