2012-03-22 17 views
5

Pracuję nad aplikacją dla google tv i chciałbym odczytać obraz z dysku flash USB podłączonego do google tv i pokazać go w mojej aplikacji. Już wiem, jak wyświetlić obraz, ale nie wiem, jak go odczytać z USB. Próbowałem z tym kodem:Jak mogę odczytać dane z pamięci flash USB?

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

Ale to nie działa na USB.

Odpowiedz

1

Myślę, że trzeba użyć:

"/ sdcard/...." zamiast "sdcard/..."

Jeśli spróbujesz "sdcard/.." będzie odczytane z katalog plików aplikacji, a nie żądana karta SD. Tak więc w twoim przypadku spróbuje otworzyć "/data/data/twoj_projekt_pakietu_budowy/pliki/sdcard/image/1.jpg"

Może również pomóc użyć zmiennej środowiskowej, aby uzyskać katalog zewnętrznej pamięci/usb

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

Upewnij się, że za pomocą debugowania i eksploratora plików ścieżka jest prawidłowa.

+1

Dzięki, ale to nie działa, ponieważ metoda getExternalStorageDirectory zwraca system plików, który jest współdzielony przez wszystkie Aplikacje i zwykle jest to sdcard ale w urządzeniach takich jak Google TV, które mają wiele pamięć zewnętrzna, ta metoda zwraca podstawowy system plików, który jest współużytkowany, a system plików w google tv nie jest wymienny. – user1286765

1

Brak publicznego interfejsu API umożliwiającego dostęp do urządzeń USB jako systemu plików. getExternalStorageDirectory() nie jest rozwiązaniem.

Aby rozwiązać ten problem, proponuję przejrzeć bibliotekę zaprojektowaną jako zestaw narzędzi, który pomoże programistom w tworzeniu aplikacji.

proste:

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

Próbowałem używać tej biblioteki, ale wyrzuca "SecurityException: Licensing.allow() musi być wywołana jako pierwsza przy fr.maxcom .... (SourceFile: 50)" podczas próby utworzenia instancji VolumeManager. Postępowałem zgodnie ze wskazówkami: 1) dodano słoik 2) wygenerowałem klucz APi 3) dodano klucz API do zamanifestowania. –

+0

Mój problem polegał na tym, że umieszczałem klucz API w manifeście mojej biblioteki aplikacji (gdzie korzystałem z VolumeManager), a nie w głównym manifeście aplikacji. To powiedziawszy, kiedy użyłem przykładowy kod na stronie, aby wyliczyć objętości i pliki, dzienniki wydrukować około 20 wiadomości "Błąd: null" w VolumeManager i StringBuilder jest pusty. Dzieje się tak pomimo dodania katalogu Media Storage Directory, tak jak w przykładzie. –