【问题标题】:Android usb permission-devicing a generic filterAndroid usb 权限设备通用过滤器
【发布时间】:2015-04-03 13:27:54
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

    不幸的是,由于大多数 USB 存储设备的分类方式,这有点棘手。 <usb-device> 过滤器标签确实支持 classsubclass 的选项,但它们仅在设备描述符级别进行评估。

    大容量存储设备将声明 USB_CLASS_MASS_STORAGE,但它们通常会在接口描述符上这样做,这是 Android 不会在过滤器中评估的内容。因此,您几乎没有资源用于捕获“仅来自任何制造商的大容量存储设备”的过滤器。

    您始终可以提供一个空的设备过滤器,以匹配 所有 连接的设备。这有点像霰弹枪的方法,但它保证你的应用有机会:

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

    从长远来看,您可以依靠这样一个事实,即普通的 Android 用户只会连接很少的 USB 设备,而且如果他们安装了您的应用程序,它们很可能是存储设备。

    我有一个example app,它就是这样做来捕获来自所有 USB 设备的连接事件。

    说了这么多,您的应用程序不需要过滤和接收USB_DEVICE_ATTACHED 事件只是为了与这些设备通信。该事件仅存在以便在建立连接时通知您的应用程序。您仍然可以随时查询UsbManager,并在应用启动时连接到现有设备,而无需处理这些事件。

    【讨论】:

    • 谢谢。这个解决方案真的很有帮助,对我来说效果很好。
    • 我需要一个小忙。每当将应用程序插入我的 android 设备时,如何使用我的应用程序直接导航到所连接设备的文件系统。 (每当连接 USB 存储设备时,我希望在我的应用程序中打开“usbdisk”)
    • Android 没有框架组件来遍历文件系统(例如,FAT)。您必须找到一个库来执行此操作或自己编写。 Android 仅提供对 USB 级命令(接口、端点、描述符)的访问。
    • 好的,谢谢。让我尝试寻找可能的替代方案来达到同样的效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多