我正在开发使用索尼互联网电视作为开发设备,它有4个USB端口。所有或没有端口可以与外部硬盘驱动器一起使用。如何选择和访问设备上的外部存储器与内部存储器。
我可以使用以下内容访问SD卡,或者至少可以访问SD卡的电视标签:
Environment.getExternalStorageDirectory();
但我似乎无法弄清楚如何找到外部USB设备。我试图沿着UsbManager类的路径前进,但似乎应该有一种更简单,更通用的方式。我只是希望能够看到大容量存储设备,并且不希望通过供应商ID等来清理。但也许我在那里遗漏了一些东西。
这应该是可能的,因为我正在寻找Media Player应用程序在打开菜单并选择“选择设备”时找到的相同功能。
我只需要对驱动器的读访问权限,但读/写可能很有用。
提前致谢。
答案 0 :(得分:6)
在Google TV v2中,USB存储支持方面有一些变化。
USB驱动器的主要变化是:
1.USB驱动器将安装/mnt/media/usb.XXXXX而不是/ sdcard。
(XXXXX由USB卷的ID(卷号:vfat或exfat,uuid:ntfs)决定。)
2.GTV支持多个USB驱动器。用户可以插入多个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。
答案 1 :(得分: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 APIs add-on library以访问usb内容。
答案 2 :(得分:1)
但我似乎无法弄清楚如何找到外部USB设备。
Android SDK中没有针对外部USB驱动器的官方支持。我在Google TV开发者文档中看不到任何内容,表明他们已在此区域添加了任何内容。
答案 3 :(得分:0)
您无法使用任何getExternalXXX()
访问USB设备,并且通过浏览MediaProvider,您将拥有归类为媒体的唯一文件的平面集合(目录结构丢失)(例如,没有.txt)
我为此需求和其他一些人开发了libmedia。在Sony 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();
}
}