【问题标题】:How can I read data from a USB Flash Drive?如何从 USB 闪存驱动器读取数据?
【发布时间】:2012-03-22 19:11:25
【问题描述】:

我正在为 google tv 开发一个应用程序,我想从连接到 google tv 的 USB 闪存驱动器中读取图像并将其显示在我的应用程序中。我已经知道如何显示图像,但我不知道如何从 USB 读取它。我试过这段代码:

File imgFile = new File("sdcard/image/1.jpg");

但它不适用于 USB。

【问题讨论】:

    标签: android google-tv usb-drive


    【解决方案1】:

    没有公共 API 可以将 USB 设备作为文件系统进行访问。 getExternalStorageDirectory() 不是解决方案。

    为了解决这个问题,我建议查看libmedia,这是一个旨在帮助开发人员构建应用程序的工具箱。

    就这么简单:

    VolumeManager volumeManager = new VolumeManager();
    List<Volume> volumes = volumeManager.getVolumes();
    Volume volume = volumes.get(0);  // simplified
    File rootFolder = volume.getRoot();
    File imgFile = new File(rootFolder, "image/1.jpg");
    

    【讨论】:

    • 我尝试使用这个库,但是当我尝试实例化 VolumeManager 时,它抛出“SecurityException: Licensing.allow() has to be first call at fr.maxcom....(SourceFile:50)”。我按照说明进行操作:1)添加 jar 2)生成 api 密钥 3)将 api 密钥添加到清单。
    • 我的问题是我将 api 密钥放置在我的应用程序库的清单中(我在其中使用 VolumeManager),而不是在主应用程序清单中。也就是说,当我使用站点上的示例代码枚举卷和文件时,日志在 VolumeManager 中打印出大约 20 条“错误:null”消息,并且 StringBuilder 为空。尽管像您在示例中所做的那样添加了媒体存储目录。
    【解决方案2】:

    我认为你需要使用:

    “/sdcard/....”而不是“sdcard/...”

    如果您尝试“sdcard/..”,它将从您的应用程序的文件目录中读取,而不是您想要的 SDCard。所以在你的情况下它会尝试打开 "/data/data/your_project_package_structure/files/sdcard/image/1.jpg"

    使用环境变量获取外部存储/usb 的目录也可能会有所帮助

    Uri u = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "blabla.xml"));
    

    确保使用调试和文件资源管理器路径正确。

    【讨论】:

    • 谢谢,但这不起作用,因为 getExternalStorageDirectory 方法返回一个在所有应用程序之间共享的文件系统,通常是 sdcard,但在像谷歌电视这样具有多个外部存储的设备中,此方法返回共享的主文件系统和 google tv 中的文件系统不可移动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2023-03-02
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多