Android usb权限 - 设置通用过滤器

时间:2015-02-04 05:50:37

标签: android

我开发了一个文件管理器应用程序来探索android文件系统。如何使其适合探索连接到任何Android设备的USB存储设备。 我尝试过为USB_DEVICE_ATTACHED操作提供意图过滤器,还提供了设备过滤器列表。 但是,问题是只有当用户插入过滤器列表中提到其详细信息的USB设备时,才会显示权限对话框。 如何在任何USB存储设备连接到Android设备时创建一个要求用户权限的通用过滤器(应用程序应该请求连接的每个USB设备的权限)。

1 个答案:

答案 0 :(得分:3)

不幸的是,由于大多数USB存储设备对自己进行分类的方式,这是一个棘手的主题。 <usb-device>过滤器标记支持classsubclass的选项,但它们仅在设备描述符级别进行评估。

大容量存储设备将声明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,并在启动应用时连接现有设备而不处理这些事件。