2012-03-22 2 views
5

Я разрабатываю приложение для Google TV, и я хотел бы прочитать изображение с USB-флеш-накопителя, подключенного к Google TV, и показать его в своем приложении. Я уже знаю, как показать изображение, но я не знаю, как его прочитать из USB. Я пробовал с кодом:Как читать данные с USB-накопителя?

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

Но это не работает для USB.

ответ

1

Я думаю, вам нужно использовать:

"/ 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")); 

Убедитесь, что с помощью отладки и проводника файлов правильный путь.

+1

Спасибо, но это не работает, потому что getExternalStorageDirectory метод возвращает файловую систему, которая является общей для всех мки и обычно это SDCard, но в таких устройствах, как телевизор Google, которые имеют несколько внешнее хранилище, этот метод возвращает основную файловую систему, которая является общей, и что файловая система в Google TV не удаляется. – user1286765

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"); 
+0

Я попытался использовать эту библиотеку, но она выбрасывает «SecurityException: Licensing.allow() нужно вызвать сначала в fr.maxcom .... (SourceFile: 50)», когда я пытаюсь создать экземпляр VolumeManager. Я следовал указаниям: 1) добавлен jar 2) сгенерированный ключ api 3) добавлен ключ api для манифестации. –

+0

Моя проблема заключалась в том, что я помещал ключ api в манифест моей библиотеки приложений (где я использовал VolumeManager), а не в основном манифесте приложения. Тем не менее, когда я использовал код примера на сайте для перечисления томов и файлов, журналы печатают около 20 сообщений «Ошибка: null» в VolumeManager и StringBuilder пуст. Это несмотря на то, что вы добавляете каталог носителей, как и в своем примере. –