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 ViewPager实现图片轮翻效果

    2023-08-01 00:30:57
  • springmvc限流拦截器的示例代码

    2021-09-08 02:50:55
  • C#对DataTable中的某列进行分组

    2021-12-10 23:06:45
  • Android中RecyclerView布局代替GridView实现类似支付宝的界面

    2021-08-20 02:32:34
  • Java案例使用比较排序器comparator实现成绩排序

    2023-10-16 01:37:24
  • spring boot自带图片服务器使用详解

    2021-11-07 07:49:39
  • sms4j 2.0 全新来袭功能的调整及maven变化详解

    2023-11-05 00:31:51
  • 三分钟快速掌握Java中枚举(enum)

    2023-11-27 09:46:30
  • @NonNull导致无法序列化的问题及解决

    2021-07-21 23:07:33
  • springboot自定义过滤器的方法

    2021-07-29 05:36:53
  • 详解C语言实现猜数字游戏

    2023-11-03 04:58:51
  • Android Intent的几种用法详细解析

    2023-08-23 20:01:01
  • Android实现倒计时的按钮的示例代码

    2021-10-17 14:45:11
  • Java中如何对字符串进行utf-8编码

    2023-01-20 16:13:04
  • SpringCloud Feign实现微服务之间相互请求问题

    2022-08-29 08:20:53
  • Android手势识别功能

    2022-07-23 22:04:26
  • C#配置文件操作类分享

    2022-09-28 11:12:05
  • 关于SpringBoot整合RabbitMQ实现死信队列

    2022-03-29 23:27:05
  • Java的设计模式编程中迪米特法则的应用示例

    2022-10-29 01:34:35
  • C# List介绍及具体用法

    2021-09-15 07:59:14
  • asp之家 软件编程 m.aspxhome.com