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

时间:2022-08-07 08:08:41 

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口.

标签:Android,USB
0
投稿

猜你喜欢

  • Android开发之使用ExifInterface获取拍照后的图片属性

    2021-05-29 23:36:36
  • Android中Socket大文件断点上传示例

    2022-07-11 02:33:32
  • Spring Security实现用户名密码登录详解

    2021-05-24 14:32:36
  • 详解Zookeeper基础知识

    2023-07-31 08:03:45
  • C#动态webservice调用接口

    2023-10-18 07:22:00
  • C#线程定义和使用方法详解

    2022-08-18 00:51:51
  • sweet alert dialog 在android studio应用问题说明详解

    2022-12-14 04:17:53
  • springCloud项目搭建流程步骤分解

    2023-04-24 23:48:43
  • 举例讲解Java中synchronized关键字的用法

    2023-07-01 22:20:19
  • Java ShutdownHook原理详解

    2023-11-10 21:30:36
  • JAVA发送HTTP请求的多种方式详细总结

    2021-06-15 14:43:48
  • Java虚拟机内存区域划分详解

    2023-06-20 22:04:24
  • Android 自定义弹性ListView控件实例代码(三种方法)

    2022-04-14 15:00:33
  • Java实现FIFO任务调度队列策略

    2021-09-19 09:05:37
  • SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法

    2022-07-18 03:38:36
  • java利用easyexcel实现导入与导出功能

    2022-09-29 06:40:16
  • C#获取网页源代码的方法

    2023-06-19 05:43:44
  • Android框架Volley之利用Imageloader和NetWorkImageView加载图片的方法

    2023-07-06 00:21:08
  • springboot logback调整mybatis日志级别无效的解决

    2023-05-03 05:36:21
  • Spring在多线程下@Resource注入为null的问题

    2022-09-11 07:41:18
  • asp之家 软件编程 m.aspxhome.com