我开发了一个文件管理器应用程序来探索 android 文件系统。我如何让它适合探索连接到任何 android 设备的 USB 存储设备。 我已经尝试为 USB_DEVICE_ATTACHED 操作提供 Intent 过滤器,还提供了一个设备过滤器列表。 但是,问题是仅当用户插入过滤器列表中提及其详细信息的 USB 设备时,才会显示权限对话框。 我如何制作一个通用过滤器,在任何 USB 存储设备连接到 Android 设备时请求用户许可(应用程序应为连接的每个 USB 设备请求许可)。
最佳答案
不幸的是,这是一个有点棘手的话题,因为大多数 USB 存储设备都采用自己的分类方式。 <usb-device>
过滤器标签支持 class
的选项和 subclass
, 但它们仅在设备描述符级别进行评估。
大容量存储设备将声明USB_CLASS_MASS_STORAGE
, 但他们通常会在接口(interface)描述符上这样做,这是 Android 不会在过滤器中评估的内容。因此,您几乎没有什么资源可以用于捕获“仅来自任何制造商的大容量存储设备”的过滤器。
您始终可以提供一个空的设备过滤器,它匹配连接的所有 设备。这有点像散弹枪方法,但它保证您的应用有机会:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device />
</resources>
从长远来看,您指望这样一个事实,即普通 Android 用户只会连接极少数 USB 设备,如果他们安装了您的应用程序,它们很可能是存储设备。
我有一个 example app这样做是为了捕获所有 USB 设备的连接事件。
话虽如此,您的应用程序不需要过滤和接收USB_DEVICE_ATTACHED
事件只是为了与这些设备进行通信。该事件仅存在,以便您的应用程序可以在建立连接时收到通知。您仍然可以查询 UsbManager
随时并在您的应用启动时从您的应用连接到现有设备,而无需处理这些事件。
关于Android usb permission-devicing一个通用的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28314366/