2012-06-25 45 views
24

Estoy desarrollando una aplicación de Android en la que tengo que comunicarme con un dispositivo USB. Intenté usar la API estándar de Google en mi aplicación, pero la lista de dispositivos está siempre vacía.Android host USB y dispositivos ocultos

Lo mismo si utilizo la información del dispositivo USB con google api. Lista de dispositivos buscadas por la API de Google está vacía,

lsusb da resultados siguientes:

Bus 001 Device 001: ID 1d6b:0001 
Bus 002 Device 001: ID 1d6b:0002 
Bus 003 Device 001: ID 1d6b:0001 
Bus 002 Device 002: ID 2226:0014 

mi dispositivo es 2226: 0014

registro de Eclipse:

I/USB3G(92): event { 'add', '/devices/platform/sw-ehci.1/usb2/2-1', 'usb', '', 189, 133 } 
I/USB3G(92): path : '/sys/devices/platform/sw-ehci.1/usb2/2-1' 
I/USB3G(92): VID :size 5,vid_path '/sys/devices/platform/sw-ehci.1/usb2/2-1/idVendor',VID '2226 
I/USB3G(92): '. 
I/USB3G(92): PID :size 5,Pid_path '/sys/devices/platform/sw-ehci.1/usb2/2-1/idProduct',PID '0014 
I/USB3G(92): '. 
I/USB3G(92): cmd=/system/etc/usb_modeswitch.sh /system/etc/usb_modeswitch.d/2226_0014 &, 
I/USB3G(92): excute ret : 0,err:No such file or directory 

Si enchufo en dispositivos como los adaptadores rs232, bluetooth dongle, no pasa nada, y no hay ningún resultado de API y lsusb.

Prtocol de un dispositivo se basa en la biblioteca ezusb. v Android 4.0.3 .: kernel v 3.0.8 .: compilación del firmware: crane_evb-spa 4.0.3 IMLK74k 20120330

es que hay alguna manera de acceder a los dispositivos USB ocultos a través de la API, o debería implementar el soporte de este dispositivo escribiendo el controlador y parchándolo en el firmware?

ACTUALIZACIÓN: incluso si i crear archivo de información en el sistema */etc/usb_modeswitch.d/* con el nombre 2226_0014 contiene

DefaultVendor= 0x2226 
DefaultProduct=0x0014 
TargetVendor= 0x2226 
TargetProductList="0014" 
MessageEndpoint="0x00" 
NeedResponse=1 
CheckSuccess=20 

consigo el mismo error: "No existe el fichero o directorio"

Respuesta

44

para habilitar el soporte de la API de host USB se debe añadir un archivo llamado
android.hardware.usb.host.xml y que contiene las siguientes líneas:

<permissions> 
<feature name="android.hardware.usb.host"/> 
</permissions> 

en la carpeta

/system/etc/permissions 

en esa carpeta encontrar el archivo llamado

handheld_core_hardware.xml or tablet_core_hardware.xml 

y añadir

<feature name="android.hardware.usb.host" /> 

en <permissions> sección.

Reinicie su dispositivo. La API del host USB debería funcionar.

probado en U30GT cubo con Android 4.

+0

Gracias compañero! ¡Funcionó también en mi Yarvik TAB464! –

+0

excelente) todo está funcionando bien) –

+0

gracias, trabajando para mí – Marijn

6

Excelente! Esto funcionó en mi Envizen V700NA con Android 4.0.4.

Menor TIPO: <feature name="android.hardware.usb.host">

debe ser: <feature name="android.hardware.usb.host"/>

Procedimiento:

  1. tirón ADB /system/etc/permissions/tablet_core_hardware.xml
  2. actualización de ese archivo y crear androide. hardware.usb.host.xml según lo especificado por Greg-q.
  3. adb empuje android.hardware.usb.host.xml/sistema/etc/permisos
  4. empuje adb tablet_core_hardware.xml/sistema/etc/permisos
  5. reinicio.
1

que he usado en adb MK809, Android 4.1 Jelly Bean, y el comando son:

ADB volver a montar /../../file.xml rw empuje ADB ...

con permiso normal de comando i'vent y el archivo es de sólo lectura

lo siento por mi mala Inglés: P

2

Trabajó como un encanto en un Micromax A120 teléfono de lona 2 (KitKat 4.4.2). ¡ahora puedo controlar mi Arduino! utilicé herramientas de busybox para hacer todo el trabajo de línea de comandos (de lo contrario, chmod no funcionaría). mis pasos (quizás algunos no fueron necesarios):

(0) instale los controladores PDAnet (http://pdanet.co/a/) en mi computadora con Windows 8. (1) rootee el teléfono usando Vroot (ahora llamado iRoot) en http://www.mgyun.com/m/en. Muy simple, solo es que la página su grant/deny está parcialmente en chino, no es gran cosa. (2) instalar busybox y de jackpal Android-Terminal-emulador (ver github https://github.com/jackpal/Android-Terminal-Emulator o Play Store https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en)

(3) abrir una ventana de terminal y convertirse en el superusuario:

# su 

(4) el archivo sistema puede ser de sólo lectura, por lo que puede que tenga que volver a montar que:

# mount -o rw,remount -t yaffs2/

o

# mount -o rw,remount -t rootfs/

o

# mount -o rw,remount -t rootfs rootfs /system 

ver http://www.pocketmagic.net/write-on-the-android-read-only-file-system/ también, ver Android 2.3 : Read-Only file system stuck también, https://ckirbach.wordpress.com/2012/11/27/how-to-remount-system-as-read-write-in-android/

(5) hacer default.prop lectura/escritura:

chmod 666 /default.prop 

(6) editar/default .apoyo, realizar los siguientes cambios:

ro.secure=0 
ro.debuggable=1 
persist.service.adb.enable=1 

ver https://android.stackexchange.com/questions/28653/obtaining-root-by-modifying-default-propro-secure o http://bclary.com/blog/2014/04/14/splitting-and-packing-android-boot-images/

Por último, simplemente para la corrección, como la respuesta anterior dice (https://stackoverflow.com/a/11992683/979369):

(7) Para habilitar la API de host USB soporte debe agregar un archivo llamado android.hardware.usb.host.xml y que contiene las siguientes líneas:

<permissions> 
<feature name="android.hardware.usb.host"/> 
</permissions> 

en la carpeta

/system/etc/permissions 

en ese archivo hallazgo carpeta llamada

handheld_core_hardware.xml or tablet_core_hardware.xml 

y añadir

<feature name="android.hardware.usb.host" /> 

en sección.

(8) Reinicie su dispositivo. La API del host USB debería funcionar.

Cuestiones relacionadas