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

来源:互联网 发布:手机信号防干扰软件 编辑:程序博客网 时间:2024/05/22 14:58

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(指定的mouse

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


1 0