我开发了一个文件管理器应用程序来探索android文件系统。如何使其适合探索连接到任何Android设备的USB存储设备。 我尝试过为USB_DEVICE_ATTACHED操作提供意图过滤器,还提供了设备过滤器列表。 但是,问题是只有当用户插入过滤器列表中提到其详细信息的USB设备时,才会显示权限对话框。 如何在任何USB存储设备连接到Android设备时创建一个要求用户权限的通用过滤器(应用程序应该请求连接的每个USB设备的权限)。
答案 0 :(得分:3)
<usb-device>
过滤器标记支持class
和subclass
的选项,但它们仅在设备描述符级别进行评估。
大容量存储设备将声明USB_CLASS_MASS_STORAGE
,但它们通常会在接口描述符上执行此操作,这是Android在过滤器中未评估的内容。因此,您几乎没有足够的资源来过滤捕获&#34;只有来自任何制造商的大容量存储设备&#34;。
您始终可以提供空的设备过滤器,该过滤器匹配连接的所有设备。它有点像霰弹枪的方法,但它保证你的应用程序有机会:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device />
</resources>
从长远来看,你可以肯定的是,普通Android用户只能连接很少的USB设备,如果他们安装了你的应用程序,他们很可能就是存储设备。
我有一个example app就可以捕获来自所有USB设备的连接事件。
说了这么多,您的应用 不 需要过滤和接收USB_DEVICE_ATTACHED
事件,只是为了与这些设备进行通信。该事件仅存在,因此您可以在建立连接时通知您的应用。您仍然可以随时查询UsbManager
,并在启动应用时连接现有设备而不处理这些事件。