6

我正在使用索尼互联网电视作为开发设备进行开发,它有 4 个 USB 端口。外部硬盘驱动器可以使用所有端口或没有端口。如何选择和访问设备上的外部存储器与内部存储器。

我可以使用以下方法访问 SD 卡,或者至少可以访问电视标记为 SD 卡的内容:

Environment.getExternalStorageDirectory();

但我似乎无法弄清楚如何找到外部 USB 设备。我试图沿着 UsbManager 类的路径走下去,但似乎应该有一种更简单、更通用的方法。我只想能够看到大容量存储设备,不想清理供应商 ID 等。但也许我在那里遗漏了一些东西。

这应该是可能的,因为我正在寻找媒体播放器应用程序在打开菜单并选择“选择设备”时发现的相同功能。

我只需要对驱动器的读取权限,但读/写可能很有用。

提前致谢。

4

4 回答 4

6

在 Google TV v2 中,对 USB 存储支持进行了一些更改。USB驱动器的主要变化是:
1.USB驱动器将挂载/mnt/media/usb.XXXXX而不是/sdcard。(XXXXX 由USB 卷的ID(volume id : vfat or exfat, uuid : ntfs)决定。)
2.GTV 支持多个U 盘。用户可以插入多个 USB 驱动器。

MediaProvider 索引所有插入的 USB 卷中的所有媒体文件。因此,应用程序可以查询 MediaProvider 以检索所有媒体文件。

示例代码:

Cursor cursor = getContentResolver().query(
Images.Media.EXTERNAL_CONTENT_URI,
new String[] {
Images.Media._ID,
Images.Media.DATA, // 文件路径
},
null, null, null);

应用程序如何检测驱动器何时同步或弹出?:
您可以注册 BroadcastReceiver 以接收 Intent.ACTION_MEDIA_SCANNER_FINISHED 和 Intent.ACTION_MEDIA_EJECT。

于 2011-11-14T06:13:55.923 回答
1

所以直觉说要使用USB Accessories api。但是,这仅适用于 android 3.1 及更高版本,如果我没记错的话,google tv 遵循 3.0 API。也就是说,从文档中:

com.android.future.usb:为了在 Android 2.3.4 中支持 USB 附件模式,Google API 附加库包含向后移植的 USB 附件 API,它们包含在此命名空间中。

因此,请查看Google API 附加库以访问 USB 内容。

于 2011-11-13T22:41:53.633 回答
1

但我似乎无法弄清楚如何找到外部 USB 设备。

Android SDK 中没有对外部 USB 驱动器的官方支持。我在 Google TV 开发人员文档中看不到任何内容表明他们在这方面添加了任何内容。

于 2011-11-13T23:05:02.303 回答
0

您无法使用 any 访问 USB 设备getExternalXXX(),并且通过 MediaProvider 您将获得归类为媒体的唯一文件(例如,没有 .txt)的平面集合(目录结构丢失)。

我为这个需求和其他一些需求开发了libmedia 。在索尼 NSZ-GS7 上测试。

示例代码:

VolumeManager volumeManager = new VolumeManager();
List<Volume> volumes = volumeManager.getVolumes();
for (Volume volume: volumes) {
    String label = volume.getLabel();
    File rootFolder = volume.getRoot();
    File[] files = rootFolder.listFiles();
    for (File file: files) {
        String filename = file.getName();
    }
}
于 2013-03-06T17:38:35.657 回答