2013-04-15 67 views
3

我想用UsbManager API通過寫下面的代碼:UsbManager.getDeviceList()返回空

在活動代碼:

 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); 

     HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); 

     Log.d(TAG, "size =" + deviceList.size()); 

在清單:

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

    <permission android:name="android.hardware.usb.host" > 

</permission> 

<uses-feature android:name="android.hardware.usb.host" android:required="true" /> 

我也跟着this question,檢查了我的Galaxy SII 9100G。它確實有/system/etc/permissions/android.hardware.usb.host.xml和正確的權限。

但是manager.getDeviceList()總是返回零,當我嘗試閃光燈驅動程序和鼠標。

任何人都可以給我任何建議嗎?

回答

0

此代碼適合我。雖然你的代碼看起來很相似,但你可以重新檢查。

UsbManager usbManager = (UsbManager) getSystemService(USB_SERVICE); 
    HashMap<String, UsbDevice> map = usbManager.getDeviceList(); 
    Iterator<UsbDevice> it = map.values().iterator(); 

    while(it.hasNext()) { 
    UsbDevice device = it.next(); 
    // use device info 
    } 
1

有沒有你的問題的普遍答案。它很大程度上取決於您的設備。仿真器完全不支持USB主機,有些設備需要root才能完成,有些設備開箱即可支持USB主機。

編輯

我最近完成我自己的這個問題對設備TF-MID1007G調查。可能會對以後的人有所幫助。有很棒的應用程序來執行設備的USB主機功能診斷 - USB Host Diagnostic(順便提一下,非常感謝作者,你真的節省了我的一天)。這個應用程序顯示關於USB主機支持設備的判決,在我的情況下,它是由內核支持的USB主機,但僅限於第三方應用程序。幸運的是,這個應用程序也可以(只在根目錄的設備上)修復您的設備系統,以增加與USB主機的能力。即使重置設備後,此修復仍會保留。在此修復程序之後,我的應用程序可以枚舉usb主機設備,請求權限等,如標準android API中所述。行動這麼短名單,使正常的USB主機配套在此設備上

  • 與虛擬根或根百度根設備(我使用了最後一個,因爲沒有靠近我的任何窗口)
  • 安裝USB Host Diagnostic
  • 開始運行故障檢測,並在其後不成功完成它要求root權限,並確認您修復系統,有了它
  • 修復程序後達成一致,確保VERDICT部分包含行的第三方應用程序 - 全
  • 所有我是重置我的設備後刪除根(這在ge中是危險的neral和百度Root總是要求安裝一些英國媒體)

現在這個設備準備好與USB設備一起工作。