2014-06-06 20 views
24

Mam więc ten mały kabel, który podłączasz do telefonu, który ma port USB po drugiej stronie, gdzie możesz podłączyć np. Pamięć flash, tak jak tutaj:Uzyskaj dostęp do urządzenia pamięci masowej USB w Androidzie

enter image description here

Kiedy podłączam dysk flash dostaję powiadomienie, że mówi: Pamięć masowa

USB podłączony

Kiedy następnie uruchomić aplikację eksploratora plików Widzę, że napęd jest następnie pod adresem:

/przechowywania/UsbDriveA/

I to świetnie, ale chcę wiedzieć, jak zdobyć dostęp do pamięci flash w moim kodzie. Uzyskanie dostępu do karty SD jest łatwe:

File sdCard = Environment.getExternalStorageDirectory(); 
File directory = new File (sdCard.getAbsolutePath() + "/MyFiles") 
directory.mkdirs(); 

Ale jak by to zrobić w przypadku dysku flash? Z góry dziękuję! :)

+0

wow jaki telefon ma port USB? – DnR

+0

haha ​​Zaktualizuję moje pytanie obrazem kabla, którego używam. – Tiwaz89

+0

Ahh Rozumiem. Myślałem, że w telefonie jest port "Female_ USB", który można podłączyć bezpośrednio bez kabla - – DnR

Odpowiedz

8

W tym przykładzie używam fileutils z Apache, ale wydarzenie bez niego będzie widać logikę używany do odczytu dysku flash USB:

private UsbManager usbManager; 
private UsbDevice clef; 
ArrayList<File> images; 

usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 
clef = null; 

if (usbManager != null) 
{ 
    HashMap<String,UsbDevice> deviceList = usbManager.getDeviceList(); 
    if (deviceList != null) 
    { 
     Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); 
     while (deviceIterator.hasNext()) { 
      clef = deviceIterator.next(); 
     } 
    } 
} 

if (clef != null) 
{ 
    File directory = new File("/storage/UsbDriveA/"); 
    if (directory != null) { 
     if (directory.canRead()) { 

      images = new ArrayList<File>(); 
      String[] imageExtensions = {"jpg","jpeg","png","gif","JPG","JPEG","PNG","GIF"}; 
      Iterator<File> iterateImages = FileUtils.iterateFiles(directory, imageExtensions, true); 
      while (iterateImages.hasNext()) { 
       File theImage = iterateImages.next(); 
       if (!theImage.getName().startsWith(".", 0)) 
        images.add(theImage); 
      } 

      // custom process/methods... not very relevant here : 
      imageIndex = 0; 
      scale = 1.0f; 
      countImgs = images.size(); 
      loadImage(imageIndex); 
     } 
    } 
} 

w moim manifest mam te linie, chociaż ja” nie jestem pewien czy wszystkie są obowiązkowe ...

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-feature android:name="android.hardware.usb.host" /> 
<uses-permission android:name="android.permission.USB_PERMISSION" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
+0

Widzę, że niektórzy mówią, że ich napęd flash USB jest dostępny przez usbdisk path, a nie UsbDriveA: jeśli chcesz pokryć wszystkie przypadki, możesz przetestować oba: jeśli z/storage/UsbDriveA/twój usbManager nadal ma wartość null, a następnie spróbuj z/storage/usbdisk/etc ... (i może kilka innych, jeśli możesz znaleźć listę różnych ścieżek, chociaż nie powinno być wiele różnych ścieżek tutaj) – JBA

3

nie mogę przetestować ten, nie mając Kabel taki sam, ale moje założenie byłoby, że można zdać filepath bezpośrednio do konstruktora, który wyglądałby następująco:

File directory = new File("/storage/UsbDriveA/"); 

Próbowałeś to?

+5

Na moim telefonie ścieżka to '/ storage/usbdisk /' – satur9nine

Powiązane problemy