通过注册广播的方式监听USB设备 。

广播Action

  • UsbManager.ACTION_USB_DEVICE_ATTACHED
    Usb设备插入或者挂载事件通知
  • UsbManager.ACTION_USB_DEVICE_DETACHED
    Usb设备拔出或者卸载时间通知

定义广播

private final BroadcastReceiver mUsbMonitorReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(final Context context, final Intent intent) {final String action = intent.getAction();if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);int vendorId = device.getVendorId();int productId = device.getProductId();} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);int vendorId = device.getVendorId();int productId = device.getProductId();}}};

根据Usb设备VenorId和ProductId检索被监听的Usb设备节点。

注册广播

IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);try {context.registerReceiver(mUsbMonitorReceiver, intentFilter);} catch (Exception e) {e.printStackTrace();}

注销广播

try {context.unregisterReceiver(mUsbMonitorReceiver);} catch (Exception e) {e.printStackTrace();}

有些系统或者设备监听不到Usb设备的插入或者挂载的事件,可通过轮询的方式根据Usb设备的节点信息(一般是VendorId和ProductId)进行检测。

根据 VendorId 和 ProductId查找Usb设备

public static UsbDevice findUsbDevice(Context context, int vendorId, int productId) {UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);final HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();if (deviceList != null) {final Iterator<UsbDevice> iterator = deviceList.values().iterator();while (iterator.hasNext()) {UsbDevice  device = iterator.next();if (device.getVendorId() == vendorId && device.getProductId() == productId) {return device;}}}return null;}

开始轮询

private void startUsbMonitor() {mHandlerThread = new HandlerThread("UsbMonitor");mHandlerThread.start();mHandler = new Handler(mHandlerThread.getLooper()) {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case EVENT_CHECK_USB_DEVICE: {boolean found = findUsbDevice(context, vendorId, productId) != null;if (!found){mHandler.sendEmptyMessageDelayed(EVENT_CHECK_USB_DEVICE, 5000);} else {// TODO:}break;}default:break;}}};mHandler.sendEmptyMessage(EVENT_CHECK_USB_DEVICE);}

结束轮询

private void stopUsbMonitor() {if (mHandler != null) {mHandler.getLooper().quit();mHandler = null;}if (mHandlerThread != null) {mHandlerThread.quitSafely();mHandlerThread = null;}}

备注:本文原创,如有侵权,请联系删除!!!

Android 监听USB设备插拔事件相关推荐

  1. C# 监听USB设备插拔动态(防多触发)

    一:通过winform窗体WndProc 局限于窗体程序中,不推荐使用 //事件代码 private const int WM_DEVICECHANGE = 0x219; //设备改变 private ...

  2. android sim卡插拔广播,Android监听SIM卡插拔的方式

    监听SIM卡是否可用 import android.app.Service; import android.content.BroadcastReceiver; import android.cont ...

  3. java 监控usb端口插拔_监控USB设备插拔

    最近做了UKey加密中设计到USB设备. 因UKEy是用来加密和执行PC与项目间通信加密的介质.从作用范围来讲不是传统意义上U盘作为存储介质来使用.其实熟悉网银驱动DR应该了解.在网银系统安全上一个最 ...

  4. Android HDMI audio设备插拔事件

    Android Q HDMI Audio热插拔检测 一.Android audio设备插拔事件检测 1.1两种机制的切换 1.2 Android 耳机插拔事件处理流程 1.3 InputEvent机制 ...

  5. android通知栏的点击事件,Android监听消息通知栏点击事件

    Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...

  6. vue监听移动设备的返回事件

    在公共方法文件common.js中实现一个存储当前历史记录的方法 common.js // 存储当前历史记录点,实现控制手机物理返回键的按钮事件 var pushHistory = function ...

  7. 使用libusb检测USB设备插拔状态

    libusb是一个提供USB设备访问的跨平台用户模式程序库.该项目最新网址:http://www.libusb.info, 支持主流的操作系统:Linux.Mac OS X. Windows.Open ...

  8. C#监视USB设备插拔动作

    参考:https://docs.microsoft.com/zh-cn/windows/desktop/DevIO/device-management-messages 1.编写USBMonitor处 ...

  9. Android监听button按钮的click事件

    方式一: 提供所有按钮监听事件入口,在OnClick方法中通过View.getId()获取到发生点击事件的按钮Id,再进行相应的处理, 在页面有多个按钮的情况下比较适用. package com.ex ...

最新文章

  1. 兼容低版本迅雷的js调用
  2. 多核分布式队列的实现:“偷”与“自私”的运用(4)
  3. 实现Spark集群部署 这些公司都经历了什么?
  4. php 安装 phpunit,phpunit的安装
  5. 优地机器人厂家_2019中国人工智能机器人企业TOP30榜单发布 优地科技跻身前十...
  6. 阿里云 ECS服务器 开放 8080 端口 -- 图解
  7. 三星Galaxy S21 FE官网“偷跑”:延续高性价比策略
  8. Spring-IOC之BeanDefinitionHolder
  9. 计算机二级宏相关例题,计算机等级考试二级Access练习题
  10. GCC 原子操作中 Acquire/Release/Consume/Relaxed 内存模型
  11. 使用MurMurHash在Shodan平台上寻找钓鱼网站
  12. 模电试题_数电试题 综合测试
  13. 实践项目二:图书馆管理系统 总结
  14. Windows美化方案,个性不光是壁纸!
  15. PDA应用软件开发特点
  16. 2022年湖南省中医执业医师考试第三单元医学针灸学模拟题
  17. C++算法和数据结构之《二叉树》
  18. 如何制作电话号码二维码?
  19. 【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用
  20. 卡诺图的最简或与式化简

热门文章

  1. FPGA/数字IC手撕代码8——秒表计数器
  2. 条形码之三九码(上)
  3. Android实现图片压缩并上传到服务器
  4. 如何通俗易懂地理解自动驾驶?
  5. 通过服务器能查到对方的信息吗,来看!通过微博用户名能查到对方什么信息?...
  6. linux查询80端口,Linux 查看 80 端口的占用情况
  7. 就这样把自己卖了(1)
  8. java 无可替代_修复错误–经验无可替代
  9. 【献血小常识】------- 献血者血液化验有哪些项目?
  10. 阿里云存储表格存储TableStore-高并发IM系统架构优化实践