我在 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);
... }
我的 list 包含这个条目:
<uses-feature android:name="android.hardware.usb.host" />
有什么我想念的吗?我试过 ACTION_USB_DEVICE_ATTACHED 而不是 ACCESSORY 但这似乎没有产生任何不同的结果。此外,一旦连接,我就可以在应用程序中与设备对话,因此,它正在被识别,并且从连接的设备(它是 NFC 读卡器)发送/接收消息的后续代码按预期工作。唯一持续失败的是初始电缆连接的通知。
TIA
最佳答案
ACTION_USB_DEVICE_ATTACHED
只能是 Activity 而不是 BroadCastReciever 的 Intent 过滤器。
UsbManager 仅解析 Activity (既不是服务也不是 BroadcastReciever)并启动它们。
所以你没有收到任何广播。
编辑:
Android Developer 网站确实说它是广播,但 Android Source 只是解析 Activity 。
虽然您可以使用 ACTION_USB_ACCESSORY_DETACHED
在接收器中分离更新
编辑2: 就 Receiver 而言,您的代码没有任何问题。由于广播 USB_ACCESSORY_ATTACHED 的方式,您的代码无法正常工作。 USB_ACCESSORY_ATTACHED 不是真正意义上的广播,Android Frameworks 仅启动 Activity Intent ,因此您不会在广播接收器中接收 Intent 。
您只能将 Activity 用于 ATTACHED Intent 而不能用于接收器
<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>
关于android - 我在此意向注册中缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13738766/