USB外接输入设备(如:键盘,鼠标等)的监听

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
         }
       }
  }

2.获得挂载的USB设备的存储空间使用情况

 StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况

 StatFs 常用方法:

 getAvailableBlocks() 
返回 Int ,获取当前可用的存储空间 
 getBlockCount() 
返回 Int ,获取该区域可用的文件系统数 
 getBlockSize() 
返回 Int ,大小,以字节为单位,一个文件系统 
 getFreeBlocks() 
返回 Int ,该块区域剩余的空间 
 restat(String path) 
执行一个由该对象所引用的文件系统
// 获得挂载的USB设备的存储空间使用情况
public static String getAvailableStore(Context context,String filePath) {
         // 取得sdcard文件路径
         StatFs statFs =  new  StatFs(filePath);
         // 获取block的SIZE
         long blocSize = statFs.getBlockSize();
 
         // 获取BLOCK总数量
         long totalBlocks = statFs.getBlockCount();
         // 可使用的Block的数量
         long availaBlock = statFs.getAvailableBlocks();
 
         // long total = totalBlocks * blocSize;
         long availableSpare = availaBlock * blocSize;
         
         String usedSize = Formatter.formatFileSize(context, (totalBlocks - availaBlock) * blocSize);
         String availableSize = Formatter.formatFileSize(context, availaBlock * blocSize);
 
         return  usedSize +  " / "  + availableSize; // 空间:已使用/可用的;
}

3,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) {
      e.printStackTrace();
     }

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

USB外接输入设备信息含义如下:

I: Bus=0019 Vendor=0002 Product=0001 Version=0100 //在Android设备与USB设备数据交互的是否使用到。

N: Name="vmouse"  //外接的USB设备的名称。

H: Handlers=sysrq kbd event4 //输入设备监听事件


P: Phys=vmouse/input0

S: Sysfs=/devices/virtual/input/input0

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


4,监听USB外接输入设备输入内容

1.)对键盘输入进行监听 getevent /dev/input/event4(指定的event

监听到的内容都是16进制的,具体数值的对应键盘按键还没有查到。


2.)对鼠标输入进行监听 cat /dev/input/mouse1(指定的mouseUSB外接输入设备(如:键盘,鼠标等)的监听_第1张图片

至于乱码的话我也不知道为什么


你可能感兴趣的:(android,usb)