我在这个意图注册中缺少什么?

Gen*_* S. 1 usb android

我在ICS并试图连接一个接收器,当USB设备和/或附件插入/拔出平板电脑时将被调用.

基于文档和其他Stack问题,它看起来像我应该需要的是下面的代码,但是当我运行此代码时没有任何事情发生...很难说,因为我的设备已将USB配件插入/拔出它,所以我的调试只是我写东西到文件,而不是实际调试,但它似乎没有做任何事情.

  IntentFilter attachFilter = new IntentFilter();
  attachFilter.addAction(ACTION_USB_PERMISSION);
  attachFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);     
  registerReceiver(mAttachReceiver, attachFilter);

  IntentFilter detachFilter = new IntentFilter();
  detachFilter.addAction(ACTION_USB_PERMISSION);
  detachFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
  registerReceiver(mDetachedReceiver, detachFilter);
Run Code Online (Sandbox Code Playgroud)

接收器看起来像这样(我为了简洁而将它们切断,但它们是有效的接收器)......

private final BroadcastReceiver mAttachReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        logMsg("ACTION = " + action);
        ... }
Run Code Online (Sandbox Code Playgroud)

}

我的清单包含此条目:

<uses-feature android:name="android.hardware.usb.host" />
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?我已经尝试了ACTION_USB_DEVICE_ATTACHED而不是ACCESSORY,但这似乎没有产生任何不同的结果.此外,我可以在应用程序中连接后与设备通信,因此,它被识别,后续代码发送/接收来自连接设备(它是NFC读卡器)的消息按预期工作.唯一持续失败的是通知初始电缆连接.

TIA

nan*_*esh 8

ACTION_USB_DEVICE_ATTACHED 只能是Activity的intent过滤器,而不是BroadCastReciever.

UsbManager只解析活动(既不是服务也不是BroadcastReciever)并启动它们.

所以你没有收到任何广播.

编辑: Android开发者网站确实说它是一个广播,但Android Source只是解析活动.虽然您可以使用ACTION_USB_ACCESSORY_DETACHED接收器中的分离更新

编辑2:就接收器而言,您的代码没有任何问题.由于广播USB_ACCESSORY_ATTACHED的方式,您的代码无法正常工作.USB_ACCESSORY_ATTACHED不是真正意义上的广播,Android Frameworks仅启动活动意图,因此您没有在广播Receiver中接收意图.

您只能为ATTACHED Intent使用Activity,而不能使用接收器

<activity android:name=".YourActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
    </intent-filter>

    <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
               android:resource="@xml/accessory_filter" />
</activity>
Run Code Online (Sandbox Code Playgroud)