我正在开发一个 Android 应用程序,它在清单中为 BroadcastReceiver 注册了四个意图过滤器。这些是:
android.hardware.usb.action.USB_DEVICE_ATTACHED
android.hardware.usb.action.USB_DEVICE_DETACHED
android.hardware.usb.action.USB_ACCESSORY_ATTACHED
android.hardware.usb.action.USB_ACCESSORY_DETACHED
请注意,目前没有与任何这些意图一起注册的
device-filter
元数据。当我在 Android 9 上(特别是在 Samsung Galaxy S9 上)启动此应用程序时,所有 USB 设备都会注册,并且在 BroadcastReceiver 中成功调用 onReceive
方法。但是,在 Android 10(Galaxy S20 上)中运行的相同代码不会调用 onReceive
。我意识到设备过滤器在开发人员文档中被列为一项要求,但 Android 9 毫无疑问地接受它。
在理想的情况下,我不想使用设备过滤器,因为我的应用程序通过用户配置包含动态设备过滤选项,用户可以在其中输入 PID/VID 组合以供应用程序使用。
我的问题是:有没有办法通过清单向 Android 10 应用程序提供“允许所有”设备过滤器?设备过滤器行为的这种变化是 Android 的总体预期功能,还是只是三星的实现?
如果它影响任何事情,这个应用程序是设备管理员。
为未来的谷歌用户回答了我自己的问题:在设备过滤器中将 PID 和 VID 的值设置为 -1。所以
device_filter.xml
文件看起来像:
<?xml version="1.0" encoding="utf-8">
<resources>
<usb-device product-id="-1" vendor-id="-1" />
</resources>
为此,我必须浏览 Android 源文件,似乎没有其他地方提到通配符的选项。
这也行。
<?xml version="1.0" encoding="utf-8">
<resources>
<!-- Match all devices -->
<usb-device />
</resources>