【问题标题】:Android Find path of already inserted USB MediaAndroid 查找已插入 USB 媒体的路径
【发布时间】:2016-02-02 10:19:46
【问题描述】:

我的设备有两条路径指向设备 /storage/udisk/ 和 /storage/udisk2/ 上的两个 USB 端口。我想以编程方式找到这些路径。插入设备时,我可以通过广播接收器找到,但这不适用于在启动时已插入的设备。是否有可以访问的已连接设备数据库?

Environment.getExternalStorageDirectory() 仅返回 SDCard 的路径,不返回插入的 USB 设备。

【问题讨论】:

标签: android android-external-storage


【解决方案1】:

我也在努力解决同样的问题。似乎不同的制造商对 USB 有不同的路径。

USB 驱动器的实际路径大多在 /mnt/media_rw/ 下(例如 /mnt/media_rw/usbotg),链接路径在 /storage/ 下(例如 /storage/usbotg)。然而,这并不总是发生。我在 3 个不同的品牌中进行了测试,发现以下内容:

  • Lenovo Tab2 A10-30 有 /storage/usbotg 作为 USB 的链接 贮存。
  • Nexus 9 没有显示与 USB 相关的路径。
  • 三星手机通常将路径命名为 /storage/UsbDiskA, /storage/UsbDiskB, ... /storage/UsbDiskF.

当您使用ADB shell命令“cat /proc/mounts”时,您会发现插入U盘后可以做出一些改变。在我的联想平板电脑中,它添加了以下两条新行:

/dev/block/vold/8:1 /mnt/media_rw/usbotg vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=重新安装-ro 0 0 /dev/fuse /storage/usbotg 熔断器 rw,nosuid,nodev,noexec,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0

【讨论】:

  • 您找到使用任何 API 的解决方案了吗?在 Nexus 6P 上,我得到 /mnt/media_rw/XXXXX,但 /storage/ 中没有。隐藏 API GetVolumeList() 不报告 USB 设备!并且 getExternalFilesDirs() 继续只列出内部存储,就好像没有其他设备一样!
  • 查看我的新答案 - libaums
【解决方案2】:

Path of OTG in Android device 的副本

答案显示了如何列出 USB OTG 设备及其各自的路径。它回答了 OP 的问题:“我想以编程方式找到这些路径”。

我已经使用答案的 github 链接来弄清楚如何以编程方式找到这些路径。

FWIW,所有信息都从 /sys/bus/usb/devices/ 收集。在 github 库中执行过滤掉非 OTG 设备的要点。

【讨论】:

    【解决方案3】:

    开源库 libaums 在您使用 USB 时有很大帮助 https://github.com/magnusja/libaums

    【讨论】:

    • 我想试试这个库,但我无法让它工作。 Java 还是新手,以及如何使用 libaums 正确实现该步骤。我可以使用实施步骤导入库,但从 usbmasstorage 开始,我的应用程序在启动时崩溃。我把它放在 onCreate() 方法上。我仍然找不到使用 libaums 的可行方法。
    • 我几年前就用过。所以我不知道与当前Android库的兼容性。您可以检查您的调试日志以了解崩溃的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多