2012-12-06 33 views
1

我在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); 

接收器看起来像这样(我剪下来的简洁但他们的有效接收器)...

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

}

我的清单包含此项:

<uses-feature android:name="android.hardware.usb.host" /> 

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

TIA

回答

6

ACTION_USB_DEVICE_ATTACHED只能是活性的意图过滤器,而不是一个BroadCastReciever。

UsbManager只解析活动(两个服务都不是BroadcastReciever)并启动它们。

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

编辑: Android开发人员网站确实说了它的广播,但Android Source只是解决活动。 尽管可以在reciever

EDIT2使用ACTION_USB_ACCESSORY_DETACHED用于分离更新: 没有什么错在你的代码,只要接收器而言。由于广播USB_ACCESSORY_ATTACHED的方式,您的代码无法工作。 USB_ACCESSORY_ATTACHED并非真正意义上的广播,Android Frameworks仅启动活动意图,因此您没有收到广播Receiver中的意图。

您只能使用活动为附加意图,而不是接收器

<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> 
+0

对不起,我真的不理解你的回应。你可以发布一个简短的代码*的例子,将广播? –

+0

真棒,谢谢! –

相关问题