Как вы можете получить доступ к внешней памяти на Google TV - PullRequest
6 голосов
/ 14 ноября 2011

Я занимаюсь разработкой, используя Sony Internet TV в качестве устройства для разработки, которое имеет 4 порта USB.Все или никакие порты могут использоваться с внешними жесткими дисками.Как выбрать и получить доступ к внешней памяти по сравнению с внутренней памятью на устройстве.

Я могу получить доступ к SD-карте или, по крайней мере, к тому, что телевизор помечает как SD-карту, используя следующее:

Environment.getExternalStorageDirectory();

Но я не могу понять, как найти внешние USB-устройства.Я попытался пойти по пути класса UsbManager, но кажется, что должен быть более простой и более общий путь.Я просто хочу видеть устройства хранения данных и не хочу выполнять очистку через идентификаторы поставщиков и т. Д. Но, может быть, я чего-то там упускаю.

Это должно быть возможно, так как я ищута же функциональность, что и в приложении Media Player при открытии меню и выборе «Выбрать устройство».

Мне нужен только доступ на чтение к дискам, но чтение / запись может быть полезным.

Спасибозаранее.

Ответы [ 4 ]

6 голосов
/ 14 ноября 2011

В Google TV v2 произошли некоторые изменения в поддержке USB-накопителей. Основные изменения для USB-накопителей:
1. Диски USB будут подключены /mnt/media/usb.XXXXX вместо / sdcard. (XXXXX определяется идентификатором (том тома: vfat или exfat, uuid: ntfs) тома USB.)
2.GTV поддерживает несколько USB-накопителей. Пользователи могут подключить несколько USB-накопителей.

MediaProvider индексирует все медиа-файлы на всех подключенных томах USB. Таким образом, приложения могут запрашивать MediaProvider для получения всех медиа-файлов.

Пример кода:

Курсор курсора = getContentResolver (). Запрос (
Images.Media.EXTERNAL_CONTENT_URI,
новая строка [] {
Images.Media._ID
Images.Media.DATA, // путь к файлу
},
ноль, ноль, ноль);

Как приложение может обнаружить, когда привод был синхронизирован или извлечен?:
Вы можете зарегистрировать BroadcastReceiver для получения Intent.ACTION_MEDIA_SCANNER_FINISHED и Intent.ACTION_MEDIA_EJECT.

1 голос
/ 14 ноября 2011

Но я не могу понять, как найти внешние USB-устройства.

В Android SDK нет официальной поддержки внешних USB-накопителей.Я не вижу ничего в документации разработчиков Google TV, чтобы предположить, что они что-то добавили в эту область.

1 голос
/ 14 ноября 2011

Итак, интуиция говорит использовать USB-аксессуары api .Тем не менее, это доступно только для Android 3.1 и выше, и, если я правильно помню, Google TV придерживается 3.0 API.Тем не менее, из документации:

com.android.future.usb: Для поддержки режима USB-аксессуаров в Android 2.3.4 библиотека дополнений API Google включает в себя API-интерфейсы USB-аксессуаров с резервным портомсодержатся в этом пространстве имен.

Так что ознакомьтесь с дополнительной библиотекой API Google для доступа к USB-материалам.

0 голосов
/ 06 марта 2013

Вы не можете получить доступ к USB-устройствам с любым getExternalXXX(), и, пройдя через 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();
    }
}
...