Android usb permission-devicing一个通用的过滤器

标签 android

我开发了一个文件管理器应用程序来探索 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/

相关文章:

java - libGdx:大于屏幕的可滚动阶段

android - 如何在 Android 中保存和恢复 ExpandableListView 的状态?

android - 如何在原生 Android 应用程序开发中使用 OpenStreetMap

android - 如何将 android.media.Image 转换为位图对象?

java - 第二个 Activity 不会返回到第一个 Activity

android - Material Design TextInputEditText 未激活时的边框颜色

php - 使用 php 发送变量的最安全方式

android - Android上的RTMP音频直播

Android:自定义标题栏不适合页面

android - 当某些闹钟在 Android 中自然重复时设置多个闹钟的最佳方法