如何在 Android 上从 USB 设备读取文件?

2024-01-02

我正在尝试通过连接的 USB 设备(通过 OTG 或 android TV 上的 USB 端口)创建类似文件资源管理器的东西。 我所需要的只是一个类似于“/storage/sda4”的路径和设备标识符,然后我可以通过简单的 android 类文件来使用设备。听起来很简单,但我找不到任何相关信息,但所有文件浏览器都可以做到这一点(例如 ESExplorer)。 好的,我找到了一种简单的方法来获取所有连接的 USB 设备的标识符

UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
usbManager.getDeviceList();

但我怎样才能获得有关路径的信息? deviceName 包含类似“/dev/bus/usb/00x”的内容,但它不能帮助我,我需要简单的模拟 android 路径(“/storage/sda4”)。这一页https://developer.android.com/guide/topics/connectivity/usb/host.html https://developer.android.com/guide/topics/connectivity/usb/host.html告诉我需要获取 USB 接口并建立 USB 连接以进行批量传输和其他废话,我完成了所有这些操作,但没有找到设备路径或有关 USB 文件列表的任何其他信息。

好的,我找到另一种方法来获取(不需要许可!)获取所有连接设备的路径

StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
Method getVolumeListMethod = StorageManager.class.getDeclaredMethod("getVolumeList");
Object[] storageVolumeList = (Object[]) getVolumeListMethod.invoke(storageManager);

它可以工作,但我需要识别一个设备(因为我想缓存不同USB存储的文件),但我可以从卷对象获取的所有内容是mStorageId,mDescriptionId,mPrimary,mRemovable,mEmulated,mMtpReserveSpace,mAllowMassStorage,mMaxFileSize,mOwner, mUuid、mUserLabel、mState、mSubSystem。 这些都无法识别设备:mDescriptionId 和 mStorageId 是 USB 端口唯一,mUuid 为空,mUserLabel 不唯一。

Environment.getExternalFilesDirs() 不会有帮助,它不提供任何设备 ID 并且仅适用于一台设备。

我在这里找到了类似的问题,但没有正确答案Android 列出 USB 驱动器中的文件 https://stackoverflow.com/questions/34795622/android-list-files-from-usb-drive.

那么,是否存在一种获取具有路径和标识符的 USB 设备列表的简单方法?


我所需要的只是一个类似于“/storage/sda4”的路径和设备标识符,然后我可以通过简单的 android 类文件来使用设备

没有为什么您无权任意访问可移动存储 https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html,包括 USB OTG 驱动器,适用于 Android 4.4+。

所有文件浏览器都可以做到这一点(例如 ESExplorer)

预装的“文件资源管理器”应用程序可能拥有设备制造商或自定义 ROM 开发商授予的附加权利。否则,他们也无法任意访问可移动存储。

是否有一种简单的方法来获取具有路径和标识符的 USB 设备列表?

没有文件系统路径,不。getStorageVolumes() on StorageManager将为您提供存储卷列表,其中包括外部存储和可移动存储。然后您可以使用createAccessIntent() on StorageVolume请求用户允许使用该卷。如果他们授予许可,您将获得Uri回复:

  • 用作卷的临时标识符(即,如果用户弹出介质,将不再可用作标识符,但在此之前,可以区分一个卷与另一个卷),并且

  • 允许您使用该卷的部分内容,但使用Uri值,而不是文件系统路径

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 上从 USB 设备读取文件? 的相关文章

随机推荐

  • ARM 的加载和存储字节和半字指令如何工作?签名与未签名有何作用?

    我刚刚开始学习 ARM 但无法理解加载和存储指令的确切作用 加载说明 ldrsb ldrb ldrsh ldrh ldr 店铺说明 strb strh str 有符号或无符号 加载半字 是什么意思 或者 加载字节 有符号或无符号 有符号和无
  • 2018 年底起的目标 API 级别要求

    我不知道这是否是询问以下问题的正确地方 我在 google play 开发者控制台上读到 2018 年下半年 Play 将要求新应用程序和应用程序 更新针对最新的 Android API 级别 这将需要 2018 年 8 月推出新应用程序
  • 使用 JPA 进行更新时如何排除实体字段

    有没有办法使字段在更新操作时不持久 但在使用 JPA Hibernate 4 创建操作时持久 我用这种方式尝试过 Transient Id Column name USER NAME nullable false length 75 pri
  • 在用户控件中处理画笔的更好方法是什么

    在 Paint 事件中使用新画笔是否是更好的方法 即 protected override void OnPaint PaintEventArgs e e Graphics SmoothingMode SmoothingMode AntiA
  • 替换整行会导致替换文本重复出现

    简单的问题 为什么 x replace y 产生 yy x replace y 相当于 Regex replace x y 结果yy您看到的内容基于其工作原理 根据 MSDN 在指定的输入字符串中 替换所有字符串匹配一个 具有指定替换字符串
  • 与平台无关的文件锁定?

    我正在进行一项计算量非常大的科学工作 时不时地会得出结果 这项工作基本上就是多次模拟同一件事 因此它被分配到使用不同操作系统的多台计算机上 我想将所有这些实例的输出定向到同一个文件 因为所有计算机都可以通过 NFS Samba 查看相同的文
  • 在 R 中使用 fromJSON 时处理 NaN

    我正在尝试使用 R 中的 fromJSON 函数来读取给我的 JSON 文件 但是该文件有NaN在其中 我无法正确读取它 这是我得到的错误 Error in feed push parser buf lexical error invali
  • 支持 19 位 Visa 和 Discover 卡验证的正则表达式模式 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 目前我正在使用以下正则表达式 但它们不支持 Visa 和 Discover 的 19 位卡 请帮忙 visaCardPattern 4 0
  • 如何从python 3中的url读取html

    我查看了以前的类似问题 却变得更加困惑 在 python 3 4 中 我想根据给定的 url 将 html 页面作为字符串读取 在 Perl 中 我使用 LWP Simple 使用 get 来完成此操作 matplotlib 1 3 1 示
  • 如何在 Swift 中清空一个对象

    如何在 Swift 中将 nil 赋给对象 如果直接分配 我会收到错误 来自苹果文档 https developer apple com library ios documentation Swift Conceptual Swift Pr
  • Python:在 voronoi 图上绘制 scipy 图

    我正在尝试在 scipy 图之上进行绘图 使用 此解决方案 Python 在 scipy 图之上绘图 沃罗诺伊 https stackoverflow com questions 45997002 python plot on top of
  • Spring AOP - @Pointcut:@Test 方法的 @Before 建议不起作用

    我正在与 Spring框架4 3 2 方面J 1 8 9 JUnit Gradle 该项目基于多模块 In src main java main 我有一些 Aspect课程和他们按照预期的方式工作 我可以通过运行时和测试来确认 现在我需要
  • 如何将两个字符的字符串@“\n”转换为实际的字符'\n'? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我只是想为脚本语言创建一些解释器 我现在遇到的一件事是如何解释两个字符长的字符 与 转换成实际的字符 例如 您不能仅在单个字符中键入内容 n
  • 安全/加密的 QR 码 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有可以生成加密二维码的应用程序 我没有很多关于加密二维码的文献 我们正在寻求实现一些功能 客户可以向我们发送加密信息 然后我们在我们的
  • Abp.io异常:激活Castle.Proxies.ProcessesServiceProxy时抛出异常

    我还是个新人Abp io http Abp io 并且我收到以下异常 我按照 Abp io 文档中的说明进行操作 请您帮助我知道我错过了什么 2019 10 10 14 01 46 644 03 00 ERR An exception wa
  • Html.ValidationMessageFor 文本颜色

    可能是一个简单的问题 但我似乎找不到答案 使用 MVC 2 我有一系列 Html ValidationFor 控件 我想为文本分配一个 CSS 类 但似乎无法做到 如果我尝试与文本框相同的方法 因为我会收到错误 因为它需要一个字符串 当我在
  • PersistentVolumeClaim 未绑定:“nfs-pv-provisioning-demo”

    我正在仅使用一个节点建立一个 kubernetes 实验室并学习设置 kubernetes nfs 我从以下链接逐步遵循 kubernetes nfs 示例 https github com kubernetes examples tree
  • Windows 7 上的 Mysql 时区未更新

    我在用着Windows 7的 mysql 5 5 15 running set time zone Europe Moscow I get Error Number 1298 Unknown or incorrect time zone E
  • 如何将项目文件夹中的用户控件添加到工具箱

    我正在开发一个 Windows 窗体项目视觉工作室2012 在项目的解决方案中 我创建了一个名为的新文件夹userControls并向其添加用户控件 UserControl1 这是解决方案的树视图 我怎样才能访问UserControl在该文
  • 如何在 Android 上从 USB 设备读取文件?

    我正在尝试通过连接的 USB 设备 通过 OTG 或 android TV 上的 USB 端口 创建类似文件资源管理器的东西 我所需要的只是一个类似于 storage sda4 的路径和设备标识符 然后我可以通过简单的 android 类文