Android 监听USB设备插拔事件
通过注册广播的方式监听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设备插拔事件相关推荐
- C# 监听USB设备插拔动态(防多触发)
一:通过winform窗体WndProc 局限于窗体程序中,不推荐使用 //事件代码 private const int WM_DEVICECHANGE = 0x219; //设备改变 private ...
- android sim卡插拔广播,Android监听SIM卡插拔的方式
监听SIM卡是否可用 import android.app.Service; import android.content.BroadcastReceiver; import android.cont ...
- java 监控usb端口插拔_监控USB设备插拔
最近做了UKey加密中设计到USB设备. 因UKEy是用来加密和执行PC与项目间通信加密的介质.从作用范围来讲不是传统意义上U盘作为存储介质来使用.其实熟悉网银驱动DR应该了解.在网银系统安全上一个最 ...
- Android HDMI audio设备插拔事件
Android Q HDMI Audio热插拔检测 一.Android audio设备插拔事件检测 1.1两种机制的切换 1.2 Android 耳机插拔事件处理流程 1.3 InputEvent机制 ...
- android通知栏的点击事件,Android监听消息通知栏点击事件
Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...
- vue监听移动设备的返回事件
在公共方法文件common.js中实现一个存储当前历史记录的方法 common.js // 存储当前历史记录点,实现控制手机物理返回键的按钮事件 var pushHistory = function ...
- 使用libusb检测USB设备插拔状态
libusb是一个提供USB设备访问的跨平台用户模式程序库.该项目最新网址:http://www.libusb.info, 支持主流的操作系统:Linux.Mac OS X. Windows.Open ...
- C#监视USB设备插拔动作
参考:https://docs.microsoft.com/zh-cn/windows/desktop/DevIO/device-management-messages 1.编写USBMonitor处 ...
- Android监听button按钮的click事件
方式一: 提供所有按钮监听事件入口,在OnClick方法中通过View.getId()获取到发生点击事件的按钮Id,再进行相应的处理, 在页面有多个按钮的情况下比较适用. package com.ex ...
最新文章
- 兼容低版本迅雷的js调用
- 多核分布式队列的实现:“偷”与“自私”的运用(4)
- 实现Spark集群部署 这些公司都经历了什么?
- php 安装 phpunit,phpunit的安装
- 优地机器人厂家_2019中国人工智能机器人企业TOP30榜单发布 优地科技跻身前十...
- 阿里云 ECS服务器 开放 8080 端口 -- 图解
- 三星Galaxy S21 FE官网“偷跑”:延续高性价比策略
- Spring-IOC之BeanDefinitionHolder
- 计算机二级宏相关例题,计算机等级考试二级Access练习题
- GCC 原子操作中 Acquire/Release/Consume/Relaxed 内存模型
- 使用MurMurHash在Shodan平台上寻找钓鱼网站
- 模电试题_数电试题 综合测试
- 实践项目二:图书馆管理系统 总结
- Windows美化方案,个性不光是壁纸!
- PDA应用软件开发特点
- 2022年湖南省中医执业医师考试第三单元医学针灸学模拟题
- C++算法和数据结构之《二叉树》
- 如何制作电话号码二维码?
- 【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用
- 卡诺图的最简或与式化简