2011-09-23 26 views
6

Estoy intentando aprovechar la capacidad de host USB en la tableta Samsung Galaxy. Compré el dispositivo de seguridad de Samsung (http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA). Cuando conecté por primera vez un dispositivo usb a través de este dispositivo de seguridad, tuve un error de alta potencia de la tableta Galaxy. Para su información, utilizo un concentrador USB con alimentación externa y puede realizar esto.Problema de host USB Android con la tableta Samsung Galaxy 10.1

Ahora que el dispositivo reconoce la existencia de un periférico USB cuando lo conecto, intenté usar el android.hardware.usb.UsbDevice de Android; import android.hardware.usb.UsbManager; biblioteca. Vi que hay dos métodos para el reconocimiento de un dispositivo USB, registrando un receptor de radiodifusión para escuchar las intenciones a través de

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

Esto no es disparar cualquier intenciones cuando hay que adjuntar cualquier dispositivo, extrañas ... ok. Así que fui a probar el siguiente método: consultando explícitamente para una lista de dispositivos a través de la UsbManager - esto se realizó de la siguiente manera:

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

Esto presumiblemente agarrar el uno (sólo un dispositivo USB compatible actualmente por Google Documentación) Dispositivo USB que está actualmente conectado. Para probar esto, llamaré al código anterior al hacer clic en un botón y mostrar los resultados del dispositivo. Por alguna razón, obtengo un dispositivo de la lista de dispositivos cada vez, ya sea que esté conectado o no un dongle USB. Además, el dispositivo es el mismo siempre, independientemente de la llave USB (o la falta de ella). La salida es la siguiente:

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

^^ el valor @ 406ff4d8 cambia cada vez que consultar este código (acabo de poner un solo ejemplo de arriba)

he buscado por todas partes y no han sido capaces de encuentre cualquier problema o solución similar que pueda aplicarse a mi situación. He intentado implementar los ejemplos de USB de Google (que es exactamente lo que tengo en esencia, arranqué los suyos) y me encuentro con estos problemas.

También debería mencionar que el maquillaje de mi manifiesta:

<?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> 

y el dispositivo de filtro:


(I eliminado criterios sobre el filtro de dispositivo, pero También he intentado insertar información específica sobre la d evice que estoy buscando ... ambos en vano.)

¡Cualquier ayuda con respecto a este problema sería muy apreciada!


Otra actualización: El dispositivo que se quejó de siempre empadronado en la lista de dispositivos

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

debe ser el puerto usb del lado de Android o algo así ...porque comencé a conectar un montón de dispositivos diferentes a mi código y encontré eso (similar a este enlace: USB_DEVICE_ATTACHED Intent not firing) Dispositivos HID, dispositivos arduino ... y tristemente ... mi dispositivo USB no parece disparar un intento o ser enumerado por el concentrador USB. Lo probé con una unidad flash USB y lo DIFUNDIÓ y funcionó ... sin embargo, aparece como el SEGUNDO dispositivo en la lista, siendo el primero el dispositivo usb omnipresente enumerado anteriormente. Sin embargo, los intentos encienden con esto.

¿Alguien sabe una solución para disparar intenciones con dispositivos HID y otros dispositivos USB, excepto los pocos que parece que Android ahora?

+0

¿Puedes verificar que el host USB funciona para otras aplicaciones? Intente conectar una cámara PTP y vea si la galería nota la intención de transmitir. Supongo que has intentado reiniciar y has actualizado tu pestaña a la última versión. –

+0

Cuando enchufo un teclado, parece que funciona. Recibo un mensaje de "Dispositivo USB conectado" cuando lo conecto. Sin embargo, el código anterior me da la misma salida con un teclado, otro dispositivo usb enchufado o nada enchufado. No entiendo por qué está reclamando ver un dispositivo usb sin importar.Sé que debe ser algo con mi código ya que el teclado se reconoce muy bien. Por cierto: cuando conecto otro dispositivo dice "dispositivo USB desconocido conectado" – hinklecw

+0

Otra actualización: el dispositivo del que me he quejado siempre enumerado en la lista de dispositivos debe ser el puerto usb de Android o algo así ... porque comencé a conectar un montón de diferentes dispositivos a mi código y encontré que (similar a este enlace: USB_DEVICE_ATTACHED intención de no disparar) Los dispositivos HID, los dispositivos arduino y mi dispositivo USB no se activan ni se enumeran en el concentrador USB. Lo probé con una unidad flash USB y lo DIFUNDIÓ y funcionó ... sin embargo, aparece como el SEGUNDO dispositivo en la lista, siendo el primero el dispositivo usb omnipresente enumerado anteriormente. Sin embargo, los intentos encienden con esto. – hinklecw

Respuesta

4

SOO lamentablemente parece que la tableta Samsung Galaxy simplemente no funciona bien con el UsbManager y con la mitad de los dispositivos USB del mundo. El kernel en Samsung parece disparar intenciones para dispositivos de almacenamiento y similares, pero no para HID y otros dispositivos aleatorios (como arduino, y mi sensor usb, y dispositivos HID también). Parece ser un error en samsung kernel. Curiosamente, los dispositivos HID FUNCIONAN en la tableta, pero no están enumerados en el UsbManager. He encontrado varios enlaces del mismo problema, y ​​parece que un parche de núcleo (o la tableta Acer) son las únicas formas de este cajero automático. con suerte, Samsung arreglará en el futuro. Aquí hay un enlace a un tipo que hizo un parche de kernel si lo que necesita es reconstruir el kernel y realmente necesita hacer funcionar el UsbManager. No lo he probado, pero pienso hacerlo eventualmente, y dejaré un comentario sobre mis pensamientos. http://forum.xda-developers.com/showthread.php?t=1233072

+0

El parche del kernel al que se ha vinculado no se aplica aquí. Es para el Samsung Galaxy Tab 7 ", pero el padre está hablando del Samsung Galaxy Tab 10.1 ya que está apuntando a Honeycomb como el mínimo SDK en su Manifiesto. –

+0

¿Todavía hay REALMENTE ninguna actualización disponible para que el modo de host USB funcione en Samsung? sin retoques, estoy usando un Acer Iconia 500, y allí todo funciona sin problemas, me encantaría tenerlo en un Samsung también – user387184

0

Samsung ha eliminado la API de USB desde el Android Kernel

1

Estoy frente mismo problema, pero se puede utilizar una DEVICENAME método(), después de dispositivo que enumera puede almacenar el nombre del dispositivo en una cadena utilizando device.getdeviceName() método.

obtendrá el nombre exacto del dispositivo, además de la información completa del dispositivo.

0

Creo que debe definir el dispositivo que desea reconocer en resource/xml/device_filter.xml. puede consultar la aplicación de Android.

-2

He adjuntado con éxito mi Arduino Uno a mi Samsung Galaxy Tab 10 P7500. Si tiene problemas para conectarlo, es porque la tableta niega el permiso para los dispositivos usb que no tienen alimentación externa. Intente alimentar su dispositivo externamente con un adaptador AC/DC de 5 o 3.3 voltios, por primera vez, si encuentra su dispositivo conectado y dispara el intento, desenchufe el adaptador de corriente, y su dispositivo funcionaría sin energía externa, la tableta misma le daría la energía a través de USB OTG

0

Puede haber otra razón (desagradable) por la que no puede ver su dispositivo HID.

UsbHostManager.beginUsbDeviceAdded() "Llamado desde JNI en monitorUsbHostBus() para informar de dispositivos USB nuevos". Este método llama a un método privado isBlackListed() que filtrará incondicionalmente todos los HUB, y HID con la subclase BOOT. Esta puede ser la razón por la que no se ve dispositivos HID cuando se hace una getDeviceList()

Si alguien tiene una solución para esto, creo que hay una buena cantidad de usuarios por ahí que apreciaría ver esto.

Cuestiones relacionadas