2011-09-23 20 views
6

Sto tentando di sfruttare la funzionalità host USB sul Samsung Galaxy Tablet. Ho acquistato il dongle allegato da Samsung (http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA). Quando ho collegato per la prima volta un dispositivo USB tramite questo dongle, ho ricevuto un errore di alta potenza dal Galaxy Tablet. FYI usa un hub USB alimentato esternamente e puoi bipassare questo.Problema di host USB di Android con Tablet Samsung Galaxy 10.1

Ora che il dispositivo stesso è riconoscere l'esistenza di una periferica USB quando attacco, ho tentato di utilizzare android.hardware.usb.UsbDevice di Android; import android.hardware.usb.UsbManager; biblioteca. Ho visto che ci sono due metodi per il riconoscimento di un dispositivo USB, registrando un ricevitore di broadcast ad ascoltare per gli effetti tramite

IntentFilter usbIntentFilter = new IntentFilter(); 
usbIntentFilter.addAction("android.hardware.usb.action.USB_DEVICE_ATTACHED");   
usbIntentFilter.addAction("android.hardware.usb.action.USB_DEVICE_DETACHED"); 
registerReceiver(mUsbReceiver,usbIntentFilter); 

Questo non è sparare alcun intenti quando attacco tutti i dispositivi, strane ... ok. Così sono andato a provare il metodo successivo: in modo esplicito l'esecuzione di query per un elenco dei dispositivi tramite l'UsbManager - questo è stato compiuto nel modo seguente:

HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); 
    int count = deviceList.size(); 
    Iterator<UsbDevice> iterator = deviceList.values().iterator(); 

    if(iterator.hasNext()){ 
    UsbDevice deviceVal = iterator.next(); 
    testTxtView1.setText("set device " + deviceVal); 
    } 

Ciò presumibilmente afferrare l'uno (solo dispositivo USB attualmente supportato per Google Documentazione) Dispositivo USB attualmente connesso. Per testare questo, richiamerei il codice sopra riportato su un clic del pulsante e visualizzerò i risultati del dispositivo. Per qualche motivo, ogni volta ricevo un dispositivo dall'elenco dei dispositivi, indipendentemente dal fatto che un dongle USB sia collegato o meno. Inoltre, il dispositivo è lo stesso ogni volta, indipendentemente dal dongle USB (o dalla sua mancanza). L'output è il seguente:

dispositivo usbDevice [mName =/dev/bus/usb/001/002, mVendorId = 1256, mProductId = 27033, mClass = 0, mSubClass = 0, mProtocol = 0, mInterfaces = [Landroid .os.Parcelable; @ 406ff4d8]

^^ il valore @ 406ff4d8 cambia ogni volta che mi interrogo questo codice (ho appena messo una singola istanza di fino)

ho cercato dappertutto e non sono stati in grado di trovare problemi o soluzioni simili che potrebbero applicarsi alla mia situazione. Ho provato a implementare esempi USB di google (che è esattamente quello che ho in sostanza, ho strappato loro) e sto correndo in questi problemi.

Vorrei anche menzionare la composizione del mio manifesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="edu.mit.ll.drm4000" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-feature android:name="android.hardware.usb.host" /> 
<uses-sdk android:minSdkVersion="12" /> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 


    <activity android:name=".DRM4000Activity" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     <intent-filter> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
     </intent-filter> 

     <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
      android:resource="@xml/device_filter" /> 

    </activity> 

</application> 

e dispositivo di filtro:


(ho tolto i criteri sul filtro dispositivo, ma ho anche provato ad inserire informazioni specifiche sul d evice Sto cercando ... entrambi inutilmente.)

Qualsiasi aiuto in merito a questo problema sarebbe molto apprezzato!


altro aggiornamento: I dispositivi di I lamentato sempre essendo enumerato nella lista dei dispositivi

dispositivo USBDevice [MNAME =/dev/bus/usb/001/002, mVendorId = 1256, mProductId = 27033, mClass = 0, mSubClass = 0, mProtocol = 0, mInterfaces = [Landroid.os.Parcelable; @ 406ff4d8]

deve essere la porta USB di Android o qualcosa del genere ...perché ho iniziato a collegare diversi dispositivi al mio codice e ho scoperto che (simile a questo collegamento: USB_DEVICE_ATTACHED Intent not firing) Dispositivi HID, dispositivi arduino..e purtroppo ... il mio dispositivo USB non sembra attivare un intent o essere enumerato da l'hub USB. Ho provato con una chiavetta USB e l'ho numerata e ha funzionato ... tuttavia si presenta come SECONDO dispositivo nell'elenco, il primo è il sempre presente dispositivo usb elencato sopra. Gli intenti fanno fuoco con esso però.

Qualcuno sa una soluzione alternativa per far sparare gli intenti con dispositivi HID e altri dispositivi USB, ad eccezione dei pochi androidi selezionati che sembra fare ora?

+0

puoi verificare che l'host USB funzioni per qualsiasi altra app? Prova a connettere una fotocamera PTP e vedere se la galleria rileva l'intento che viene trasmesso. Presumo che hai provato a riavviare e hai aggiornato la tua scheda alla versione più recente. –

+0

Quando collego una tastiera, sembra funzionare. Ricevo un messaggio "USB Device Connected" quando lo inserisco. Tuttavia, il codice sopra riportato mi dà lo stesso risultato con una tastiera, un altro dispositivo USB collegato o niente collegato. Non capisco perché stia affermando di vedere un dispositivo USB a prescindere.So che deve essere qualcosa con il mio codice da quando la tastiera è riconosciuta bene. BTW: quando collego un altro dispositivo dice "Unknown USB Device Connected" – hinklecw

+0

Un altro aggiornamento: il dispositivo che mi sono lamentato di essere sempre enumerato nell'elenco dei dispositivi deve essere la porta USB Android o qualcosa del genere ... perché ho iniziato ad allegare un sacco di diversi dispositivi al mio codice e ho scoperto che (simile a questo link: USB_DEVICE_ATTACHED Intenzione non attiva) I dispositivi HID, i dispositivi arduino e il mio dispositivo USB non attivano un intent o vengono enumerati dall'hub USB. Ho provato con una chiavetta USB e l'ho numerata e ha funzionato ... tuttavia si presenta come SECONDO dispositivo nell'elenco, il primo è il sempre presente dispositivo usb elencato sopra. Gli intenti fanno fuoco con esso però. – hinklecw

risposta

4

SOO sfortunatamente sembra che il Samsung Galaxy Tablet non funzioni bene con UsbManager e circa la metà dei dispositivi USB nel mondo. Il kernel di Samsung sembra lanciare intenti per dispositivi di archiviazione e simili, ma non per HID e altri dispositivi casuali (come arduino, e il mio sensore usb, e anche dispositivi HID.) Sembra essere un bug nel kernel di Samsung. È interessante notare che i dispositivi HID funzionano sul tablet, ma non sono enumerati su UsbManager. Ho trovato diversi link dello stesso problema, e sembra che una patch del kernel (o il tablet acer) sia l'unico modo per aggirare questo bancomat. spero che Samsung risolverà in futuro. Ecco un link a un tizio che ha fatto una patch del kernel se la ricostruzione del kernel è la tua cosa e hai davvero bisogno di far funzionare UsbManager. Non ho provato ma ho intenzione di farlo, e lascerò un commento sui miei pensieri. http://forum.xda-developers.com/showthread.php?t=1233072

+0

La patch del kernel a cui è collegato non si applica qui. È per il Samsung Galaxy Tab 7 ", ma il genitore sta parlando del Samsung Galaxy Tab 10.1 dal momento che sta prendendo di mira Honeycomb come SDK minimo nel suo Manifest. –

+0

Esiste ancora VERAMENTE nessun aggiornamento disponibile per far funzionare la modalità host USB su Samsung senza alcun ritocco? Sto usando un Acer Iconia 500, e lì tutto funziona senza problemi - Mi piacerebbe averlo anche su un Samsung – user387184

0

Samsung ha rimosso l'API USB dal Android Kernel

1

Sto affrontando lo stesso problema, ma è possibile utilizzare un metodo DeviceName(), dopo che il dispositivo enumerazione è possibile memorizzare il nome del dispositivo in una stringa utilizzando device.getdeviceName() metodo.

otterrete il nome esatto del dispositivo appart dalle informazioni complete del dispositivo.

0

Penso che dovresti definire il dispositivo che vuoi riconoscere in resource/xml/device_filter.xml. puoi riferirti all'apice Android.

-2

Ho collegato con successo il mio Arduino Uno alla mia scheda Samsung Galaxy 10 P7500. Se si verifica un problema nel collegarlo, è perché il tablet nega l'autorizzazione per i dispositivi USB che non hanno alimentazione esterna. Provare ad alimentare il dispositivo esternamente usando l'adattatore AC/DC da 5 o 3,3 Volt, per la prima volta, se si trova il dispositivo collegato e si attiva l'intento, scollegare l'alimentatore e il dispositivo funzionerà senza alimentazione esterna, il tablet stesso darebbe l'alimentazione tramite USB OTG

0

Potrebbe esserci un altro (brutto) motivo per cui non è possibile vedere il dispositivo HID.

UsbHostManager.beginUsbDeviceAdded() "Chiamato da JNI in monitorUsbHostBus() per segnalare nuovi dispositivi USB". Questo metodo chiama un metodo privato isBlackListed() che filtra incondizionatamente tutti gli HUB e HID con sottoclasse BOOT. Questo può essere il motivo per cui non si vede i dispositivi HID quando si fare un getDeviceList()

Se qualcuno ha una soluzione a questo, penso che ci sono una quantità ingente di utenti là fuori che gradirebbe vedere questo.