【发布时间】:2012-06-28 10:31:57
【问题描述】:
最近我一直在尝试根据我见过的所有示例和示例使用广播接收器接收意图 android.hardware.usb.action.USB_DEVICE_ATTACHED。
我已经在清单中声明了一个接收者;
<receiver android:name=".UsbDeviceReceiver">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter"/>
我在活动代码中也做了类似的操作 - onStart 和 OnStop 注册/注销接收器。
IntentFilter filter = new IntentFilter();
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
registerReceiver(mUsbReceiver, filter);
但是,我发现意图被抓住了。观察 logcat 我可以看到附加 USB 设备会寻找要启动的活动,而分离则广播分离意图。根据上述样本,情况并非如此。
我是否遗漏了有关元数据的一些重大问题?我对 android.hardware.usb.action.USB_DEVICE_DETACHED 没有任何问题。也许这是安装在galaxy s3上的android版本的错误?也许这是 ICS 的“功能”。
欢迎提供任何相关信息!
【问题讨论】:
-
代码(参见示例)github.com/android/platform_frameworks_base/blob/master/… 不会在设备附件上发送广播,它只会启动专门注册以处理该设备的活动。有人在 gerrit 上提交了一个补丁来发送广播,但由于与设计理念不匹配,它似乎被拒绝了。
-
嗨,克里斯,感谢您的简洁回复。令人欣慰的是,这不仅仅是我的设备的问题。补丁提交是否仍然存在,以便我可以更详细地阅读此行为的原因?我目前的解决方法将涉及一个无形的活动和我自己的广播。感觉就像一个黑客。完成后我会发布代码。