USB线插拔检测使用UEventObserver检测uevent事件的分析

本文介绍了如何使用UEventObserver检测Android设备上的USB线插拔事件,通过分析UEventObserver的初始化、startObserving过程,以及uevent事件的接收和匹配,展示了该机制如何工作,帮助开发者理解这一硬件变化检测工具。
摘要由CSDN通过智能技术生成

说实话这玩样儿的代码量真的很少,大家如果能耐得住性子啃一会儿也就能撸懂了。

在这之前研究USB线插拔的时候就知道了有这么个东西,当时也就看了看,但没做什么笔记。最近想用起来,却发现就只有个名字在记忆中了。

 

好了,又扯了这么多,来回到正题。

 

首先按照技术博客一贯的作风,得先有个入口点,这里我就先从怎么使用这个UEventObserver开始一步步分析。

 

首先这玩样儿是java代码,所以你就别想着c++什么用了。

 

这里我举例了USB线插拔来分析,代码地址如下:


frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.java

 

   /*

    * Listens for uevent messages from the kernel to monitor the USB state

    */

   private final UEventObserver mUEventObserver = new UEventObserver() {

       @Override

       public void onUEvent(UEventObserver.UEvent event) {

           if (DEBUG) Slog.v(TAG, "USB UEVENT: " + event.toString());

 

           String state =event.get("USB_STATE");

           String accessory = event.get("ACCESSORY");

           if (state != null) {

                mHandler.updateState(state);

           } else if ("START".equals(accessory)) {

                if (DEBUG) Slog.d(TAG,"got accessory start");

                startAccessoryMode();

           }

       }

   };


这里我们可以看到使用前必须先初始化一个新的UEventObserver类来处理事件,即函数onUEvent,这是一个回调函数,之后我们会看到他是怎么被调用的。这里这个回调函数根据处理的事件消息来判断是否要更新USB的状态,继而触发通知栏显示。

 

初始化完UEventObserver之后,我们还需要使用这个类,接下来的代码做了这个事。

 

   private static final String USB_STATE_MATCH =

           "DEVPATH=/devices/virtual/android_usb/android0";

 

       public UsbHandler(Looper looper) {

           super(looper);

                // Watch for USB configurationchanges

               mUEventObserver.startObserving(USB_STATE_MATCH);





从中我们看出他直接调用了UEventObserver的startObserving函数,并且指定了参数,即一段字符串。

 

接下来我们看下startObserving到底做了什么事。

    p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值