2011-10-23 49 views
3

我想與usb設備進行通信,使用acer iconia a500升級到android 3.2(內核2.6.36.3+,沒有紮根,我只是使用常規更新功能)。 簡而言之,發生的事情是,在我得到UsbManager後,getDeviceList返回一個空映射。同樣的情況,與從谷歌adbtest樣本:usb主機模式與iconia a500和android 3.2:沒有設備

mManager = (UsbManager)getSystemService(Context.USB_SERVICE); 
// check for existing devices 
for (UsbDevice device : mManager.getDeviceList().values()) { 
    // I get nothing here, the values() list is empty 

我試過幾個設備(各種USB固態硬盤,一個硬盤驅動器,鼠標,Garmin的手錶,等等)。沒有。某些設備(磁盤,鼠標)確實可以被操作系統識別(它們的工作原理:我看到文件系統,鼠標工作正常等),但是它們並沒有在API級別上得到體現。

谷歌搜索,有人說,鼠標和鍵盤不枚舉,但磁盤做,但他們使用3.1,而我使用3.2。我也沒有拿到磁盤,或者其他插入的東西。

上面的代碼應該枚舉所有設備。無論如何,我還嘗試了谷歌示例中記錄的intent + xml文件方法。依然沒有。

清單似乎沒問題,正如我所說的,直接從sdk獲得的adbtest示例顯示了同樣的問題。

鑑於API的缺乏,我不知道接下來要做什麼。有沒有人成功地使用Android 3.2的iconia a500上的主機模式?

編輯:我的意思是「使用」在API級別。正如我所說的,「標準」設備在操作系統級別得到了認可,並且可以工作,但通過API無法看到。最後,我需要在主機模式下與非標準設備進行通信,所以我真的需要通過API獲取它。

編輯2:我不打算生根我的設備,因爲我的應用程序(如果我曾經設法寫它:-)將是無用的,如果需要生根。

謝謝!

  • VIC
+0

我用3.2版的Iconia使用了鍵盤,鼠標和外置NTFS硬盤。 –

+0

是的,正如我所說的,我也是。他們自己開發,但不能在API級別進行枚舉,因此雖然操作系統可以看到它們,但我不能(因此我無法與非標準設備進行通信)。我會澄清我的問題,謝謝! – vic

+0

您可以聯繫「驅動器安裝」的開發人員,聽聽他是如何工作的。該應用程序在這裏:https://market.android.com/details?id=au.dach.drivemount –

回答

2

確保你的意圖過濾器是不是隱藏的設備。

http://developer.android.com/guide/topics/usb/host.html

「一般來說,使用供應商和產品ID,如果你要篩選特定設備,並且如果要篩選爲一組的USB設備,如大規模的使用類,子類,和協議。存儲設備或數碼相機,您可以指定none或所有這些屬性指定沒有屬性相匹配的所有USB設備,因此,如果您的應用需要,只能這樣做。」

告訴我,如果你的作品。

+0

它適合你嗎? – 00jt

+0

我剛買了一臺A500。 你的代碼工作和識別其他平板電腦...但你是對的,它不能識別我的鍵盤或鼠標。 – 00jt

+0

我的A500識別(使用API​​): 打印機,USB存儲設備,其他平板電腦。 它不識別: 鼠標/鍵盤(即使沒有過濾器)。 奇怪的是(正如你所指出的),鼠標和鍵盤在A500上工作...他們只是不顯示在API的「附加USB設備」列表上 – 00jt

0

試試這個代碼,

mUsbManager = (UsbManager) getSystemService(USB_SERVICE); 
HashMap<String, UsbDevice> devicelist = mUsbManager.getDeviceList(); 
Iterator<UsbDevice> deviceIterator = devicelist.values().iterator(); 

if (deviceIterator.hasNext()) { 
    while(deviceIterator.hasNext()) { 
     mUsbDeviceX = deviceIterator.next(); 
     if (mUsbDeviceX != null) { 
      Log.v(Log_Tag, "ProdID: " +mUsbDeviceX.getProductId()); 
      Log.v(Log_Tag, "VendID: " +mUsbDeviceX.getVendorId()); 
     } 
    } 
} else { 
    Log.v(Log_Tag, "No Usb Devices Attached"); 
} 

如果它不工作比這裏我們展示的dmesg/logcat的輸出。