csbmary 2013-10-17 03:24 采纳率: 0%
浏览 1022

usbhost设备拔掉,但是通过枚举设备,依然可以枚举到

我在android4.2上开发一个用usbhost通信的apk,为了支持可插拔,我用捕捉系统intent,但是发现,不是每次都能捕捉到intent;改为通过枚举设备号来检测设备的插拔状态,发现,当usbhost设备拔掉,却依然可以获取到pid和vid,也就是说系统认为设备还是attached状态,为什么会这样,或者有没有可以清楚设备信息的函数,是系统对设备的状态信息进行更新?

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-19 19:12
    关注

    该回答引用ChatGPT

    这可能是由于USB主机控制器(Host Controller)的缓存导致的。USB主机控制器会维护一个设备列表,其中包括已经插入但尚未正确拔出的设备。这样做是为了加速USB设备的插入和拔出过程,因为USB设备插入时需要进行大量的初始化和协商,而这些操作可能需要一些时间。


    如果您想要获取实时的USB设备状态,您可以尝试使用USB设备的事件通知(Event Notification)。您可以通过注册一个广播接收器(Broadcast Receiver)来接收USB设备事件通知。当USB设备插入或拔出时,系统会向广播接收器发送相应的USB设备事件通知。您可以在接收到USB设备事件通知后立即获取USB设备的状态信息。


    以下是一个处理USB设备事件通知的示例代码:

    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
                // USB设备已经插入
                UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                // 获取USB设备状态信息
                int vendorId = device.getVendorId();
                int productId = device.getProductId();
                ...
            } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
                // USB设备已经拔出
                UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                // 获取USB设备状态信息
                int vendorId = device.getVendorId();
                int productId = device.getProductId();
                ...
            }
        }
    }
    

    您需要在AndroidManifest.xml文件中注册广播接收器,并为其添加必要的Intent过滤器:

    <receiver android:name=".MyBroadcastReceiver">
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
        </intent-filter>
    </receiver>
    

    请注意,使用USB设备事件通知可能会对设备的电池寿命产生一定的影响,因为您需要在后台保持广播接收器处于活动状态。因此,请确保您只在必要时使用USB设备事件通知。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题