Android 10 中没有设备过滤器的 USB_DEVICE_ATTACHED

问题描述 投票:0回答:2

我正在开发一个 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 的总体预期功能,还是只是三星的实现?

如果它影响任何事情,这个应用程序是设备管理员。

android broadcastreceiver usb
2个回答
13
投票

为未来的谷歌用户回答了我自己的问题:在设备过滤器中将 PID 和 VID 的值设置为 -1。所以

device_filter.xml
文件看起来像:

<?xml version="1.0" encoding="utf-8">
<resources>
    <usb-device product-id="-1" vendor-id="-1" />
</resources>

为此,我必须浏览 Android 源文件,似乎没有其他地方提到通配符的选项。


0
投票

这也行。

<?xml version="1.0" encoding="utf-8">
<resources>
    <!-- Match all devices -->
    <usb-device />
</resources>
© www.soinside.com 2019 - 2024. All rights reserved.