我在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
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)
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |