2014-06-06 19 views
24

Vì vậy, tôi có cáp nhỏ này mà bạn cắm vào điện thoại có cổng USB ở phía bên kia, nơi bạn có thể cắm ổ flash chẳng hạn như bạn có thể xem tại đây:Hãy truy cập thiết bị lưu trữ USB trong android

enter image description here

Khi tôi cắm vào một ổ đĩa flash tôi nhận được một thông báo nói rằng:

USB mass storage kết nối

Khi tôi sau đó khởi động một ứng dụng tập tin thám hiểm Tôi có thể thấy rằng ổ đĩa sau đó được đặt tại:

/lưu trữ/UsbDriveA/

Và đó là tuyệt vời, nhưng tôi muốn biết làm thế nào để đạt được truy cập vào ổ đĩa flash trong mã của tôi. Việc truy cập vào thẻ SD đủ dễ dàng:

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

Nhưng bạn sẽ làm điều này như thế nào trong trường hợp ổ đĩa flash? Cảm ơn trước! :)

+0

wow điện thoại nào có cổng USB ?? – DnR

+0

haha ​​Tôi sẽ cập nhật câu hỏi của mình bằng một pic của cáp mà tôi đang sử dụng. – Tiwaz89

+0

Ahh tôi hiểu rồi. Tôi nghĩ rằng có một cổng USB _Female_ trên điện thoại có thể cắm trực tiếp mà không cần cáp -_- – DnR

Trả lời

8

Trong ví dụ này tôi đang sử dụng FileUtils từ Apache, nhưng sự kiện mà không có nó bạn sẽ thấy những logic được sử dụng để đọc một ổ đĩa USB Flash:

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); 
     } 
    } 
} 

Trong manifest của tôi, tôi có những dòng này, mặc dù tôi m không chắc chắn tất cả đều bắt buộc ...

<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

Tôi có thể thấy rằng một số người nói rằng ổ đĩa flash USB của họ có thể truy cập thông qua đường dẫn usbdisk và không phải USBDriveA: nếu bạn muốn bao gồm tất cả các trường hợp bạn có thể kiểm tra cả hai: nếu có/lưu trữ/UsbDriveA/usbManager của bạn vẫn là null, sau đó thử với/storage/usbdisk/etc ... (và có thể một vài người khác nếu bạn có thể tìm thấy một danh sách các đường dẫn khác nhau, mặc dù không nên có một số lượng lớn các đường dẫn khác nhau đây) – JBA

3

tôi không thể kiểm tra điều này, không có một cáp như vậy bản thân mình, nhưng giả định của tôi sẽ được rằng bạn có thể vượt qua filepath của bạn trực tiếp vào các nhà xây dựng mà sẽ trông như thế:

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

Các bạn đã thử điều này?

+5

Trên điện thoại của tôi đường dẫn là '/ storage/usbdisk /' – satur9nine

Các vấn đề liên quan