Bypass android usb host permiso diálogo de confirmación

Quiero usar android en la industria,

Puedo conectar a Profilic y Ftdi USB a los chips en serie con la biblioteca de slickdevlabs.com sin ningún problema.

La aplicación tiene un servicio y se inicia en el arranque, se conecta al puerto serie usb y hacer las otras cosas.

Mi problema es que el dispositivo host no tiene ninguna interacción con el usuario,

Así que cuando el androide pregunta

Allow the app "MyAPP" to access the USB device ? [checkmark]Use by default for this USB device Cancel OK 

No hay persona para hacer clic en ok.

Incluso cuando compruebo el uso por defecto … casilla de verificación, si vuelvo a insertar el USB, o reiniciar el dispositivo host, se pregunta de nuevo en el próximo arranque.

Corrí el servicio y la aplicación con el modo SuperUser, pero no hay diferencia, se pregunta de nuevo.

He añadido el filtro intención, pero no hay diferencia, me lo pide cada vez.

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

¿Alguna opinión sobre cómo evitarlo o deshabilitarlo?

Tengo acceso root y SU.

Sé que es un poco tarde, pero todavía …

Tuve el mismo tipo de problema y creo que he logrado solucionarlo. Hay un servicio que Android utiliza internamente que permite administrar dispositivos USB y accesorios. Este servicio está oculto de los desarrolladores de terceros y no está documentado. Si comprueba el código fuente de UsbPermissionActivity, podrá averiguar cómo se llama a ese servicio. Para llamar al servicio se utilizan la interfaz IUsbManager y la clase ServiceManager. Estos también están ocultos, por lo que no puede utilizarlos directamente. Pero lo que puede hacer es crear sus stubs con exactamente los mismos nombres y en los espacios de nombres correspondientes (paquetes). A continuación, podrá compilar ese código, mientras que el entorno de ejecución utilizará las cosas reales.

El único requisito es que su aplicación tiene que ser un sistema uno – que es que tiene que estar ubicado en / system / app / directorio. Ya que tu dispositivo está enraizado, no debería ser un problema.

Así que tendrá que agregar un paquete a su proyecto: " android.hardware.usb " y poner un archivo en él llamado " IUsbManager.java " con el siguiente contenido:

 package android.hardware.usb; public interface IUsbManager extends android.os.IInterface { /** Local-side IPC implementation stub class. */ public static abstract class Stub extends android.os.Binder implements android.hardware.usb.IUsbManager { /** Construct the stub at attach it to the interface. */ public Stub() { throw new RuntimeException( "Stub!" ); } /** * Cast an IBinder object into an android.hardware.usb.IUsbManager interface, * generating a proxy if needed. */ public static android.hardware.usb.IUsbManager asInterface( android.os.IBinder obj ) { throw new RuntimeException( "Stub!" ); } public android.os.IBinder asBinder() { throw new RuntimeException( "Stub!" ); } public boolean onTransact( int code, android.os.Parcel data, android.os.Parcel reply, int flags ) throws android.os.RemoteException { throw new RuntimeException( "Stub!" ); } static final int TRANSACTION_getDeviceList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); static final int TRANSACTION_openDevice = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1); static final int TRANSACTION_getCurrentAccessory = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2); static final int TRANSACTION_openAccessory = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3); static final int TRANSACTION_setDevicePackage = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4); static final int TRANSACTION_setAccessoryPackage = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5); static final int TRANSACTION_hasDevicePermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6); static final int TRANSACTION_hasAccessoryPermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 7); static final int TRANSACTION_requestDevicePermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 8); static final int TRANSACTION_requestAccessoryPermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 9); static final int TRANSACTION_grantDevicePermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 10); static final int TRANSACTION_grantAccessoryPermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 11); static final int TRANSACTION_hasDefaults = (android.os.IBinder.FIRST_CALL_TRANSACTION + 12); static final int TRANSACTION_clearDefaults = (android.os.IBinder.FIRST_CALL_TRANSACTION + 13); static final int TRANSACTION_setCurrentFunction = (android.os.IBinder.FIRST_CALL_TRANSACTION + 14); static final int TRANSACTION_setMassStorageBackingFile = (android.os.IBinder.FIRST_CALL_TRANSACTION + 15); } /* Returns a list of all currently attached USB devices */ public void getDeviceList( android.os.Bundle devices ) throws android.os.RemoteException; /* Returns a file descriptor for communicating with the USB device. * The native fd can be passed to usb_device_new() in libusbhost. */ public android.os.ParcelFileDescriptor openDevice( java.lang.String deviceName ) throws android.os.RemoteException; /* Returns the currently attached USB accessory */ public android.hardware.usb.UsbAccessory getCurrentAccessory() throws android.os.RemoteException; /* Returns a file descriptor for communicating with the USB accessory. * This file descriptor can be used with standard Java file operations. */ public android.os.ParcelFileDescriptor openAccessory( android.hardware.usb.UsbAccessory accessory ) throws android.os.RemoteException; /* Sets the default package for a USB device * (or clears it if the package name is null) */ public void setDevicePackage( android.hardware.usb.UsbDevice device, java.lang.String packageName ) throws android.os.RemoteException; /* Sets the default package for a USB accessory * (or clears it if the package name is null) */ public void setAccessoryPackage( android.hardware.usb.UsbAccessory accessory, java.lang.String packageName ) throws android.os.RemoteException; /* Returns true if the caller has permission to access the device. */ public boolean hasDevicePermission(android.hardware.usb.UsbDevice device) throws android.os.RemoteException; /* Returns true if the caller has permission to access the accessory. */ public boolean hasAccessoryPermission( android.hardware.usb.UsbAccessory accessory ) throws android.os.RemoteException; /* Requests permission for the given package to access the device. * Will display a system dialog to query the user if permission * had not already been given. */ public void requestDevicePermission( android.hardware.usb.UsbDevice device, java.lang.String packageName, android.app.PendingIntent pi ) throws android.os.RemoteException; /* Requests permission for the given package to access the accessory. * Will display a system dialog to query the user if permission * had not already been given. Result is returned via pi. */ public void requestAccessoryPermission( android.hardware.usb.UsbAccessory accessory, java.lang.String packageName, android.app.PendingIntent pi ) throws android.os.RemoteException; /* Grants permission for the given UID to access the device */ public void grantDevicePermission( android.hardware.usb.UsbDevice device, int uid ) throws android.os.RemoteException; /* Grants permission for the given UID to access the accessory */ public void grantAccessoryPermission( android.hardware.usb.UsbAccessory accessory, int uid ) throws android.os.RemoteException; /* Returns true if the USB manager has default preferences or permissions for the package */ public boolean hasDefaults( java.lang.String packageName ) throws android.os.RemoteException; /* Clears default preferences and permissions for the package */ public void clearDefaults( java.lang.String packageName ) throws android.os.RemoteException; /* Sets the current USB function. */ public void setCurrentFunction( java.lang.String function, boolean makeDefault ) throws android.os.RemoteException; /* Sets the file path for USB mass storage backing file. */ public void setMassStorageBackingFile( java.lang.String path ) throws android.os.RemoteException; } 

Luego otro paquete: " android.os " con " ServiceManager.java ":

 package android.os; import java.util.Map; public final class ServiceManager { public static IBinder getService( String name ) { throw new RuntimeException( "Stub!" ); } /** * Place a new @a service called @a name into the service * manager. * * @param name the name of the new service * @param service the service object */ public static void addService( String name, IBinder service ) { throw new RuntimeException( "Stub!" ); } /** * Retrieve an existing service called @a name from the * service manager. Non-blocking. */ public static IBinder checkService( String name ) { throw new RuntimeException( "Stub!" ); } public static String[] listServices() throws RemoteException { throw new RuntimeException( "Stub!" ); } /** * This is only intended to be called when the process is first being brought * up and bound by the activity manager. There is only one thread in the process * at that time, so no locking is done. * * @param cache the cache of service references * @hide */ public static void initServiceCache( Map<String, IBinder> cache ) { throw new RuntimeException( "Stub!" ); } } 

Tenga en cuenta que las interfaces de estas clases pueden cambiar dependiendo de la versión de Android. En mi caso la versión es 4.0.3 . Así que si usted tiene otra versión de Android y este código no funciona, tendrá que comprobar el código fuente de su versión particular del sistema operativo.

A continuación se muestra un ejemplo de cómo utilizar el servicio para conceder permisos a todos los dispositivos FTDI:

 import java.util.HashMap; import java.util.Iterator; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.hardware.usb.IUsbManager; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.os.IBinder; import android.os.ServiceManager; public class LaunchReceiver extends BroadcastReceiver { public void onReceive( Context context, Intent intent ) { String action = intent.getAction(); if( action != null && action.equals( Intent.ACTION_BOOT_COMPLETED ) ) { try { PackageManager pm = context.getPackageManager(); ApplicationInfo ai = pm.getApplicationInfo( YOUR_APP_PACKAGE_NAMESPACE, 0 ); if( ai != null ) { UsbManager manager = (UsbManager) context.getSystemService( Context.USB_SERVICE ); IBinder b = ServiceManager.getService( Context.USB_SERVICE ); IUsbManager service = IUsbManager.Stub.asInterface( b ); HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); while( deviceIterator.hasNext() ) { UsbDevice device = deviceIterator.next(); if( device.getVendorId() == 0x0403 ) { service.grantDevicePermission( device, ai.uid ); service.setDevicePackage( device, YOUR_APP_PACKAGE_NAMESPACE ); } } } } catch( Exception e ) { trace( e.toString() ); } } } } 

Una cosa más – tendrá que agregar el siguiente permiso a su manifiesto (Lint puede no le gusta pero siempre puede cambiar el nivel de gravedad en las propiedades de su proyecto):

 <uses-permission android:name="android.permission.MANAGE_USB" /> 

@d_d_t aswer es genial, pero no funciona en los nuevos 4.2.2. Utilice esta interfaz:

 public interface IUsbManager extends android.os.IInterface { /** Local-side IPC implementation stub class. */ public static abstract class Stub extends android.os.Binder implements android.hardware.usb.IUsbManager { private static final java.lang.String DESCRIPTOR = "android.hardware.usb.IUsbManager"; /** Construct the stub at attach it to the interface. */ public Stub() { throw new RuntimeException( "Stub!" ); } /** * Cast an IBinder object into an android.hardware.usb.IUsbManager * interface, generating a proxy if needed. */ public static android.hardware.usb.IUsbManager asInterface( android.os.IBinder obj) { throw new RuntimeException( "Stub!" ); } @Override public android.os.IBinder asBinder() { throw new RuntimeException( "Stub!" ); } @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { throw new RuntimeException( "Stub!" ); } static final int TRANSACTION_getDeviceList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); static final int TRANSACTION_openDevice = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1); static final int TRANSACTION_getCurrentAccessory = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2); static final int TRANSACTION_openAccessory = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3); static final int TRANSACTION_setDevicePackage = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4); static final int TRANSACTION_setAccessoryPackage = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5); static final int TRANSACTION_hasDevicePermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6); static final int TRANSACTION_hasAccessoryPermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 7); static final int TRANSACTION_requestDevicePermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 8); static final int TRANSACTION_requestAccessoryPermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 9); static final int TRANSACTION_grantDevicePermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 10); static final int TRANSACTION_grantAccessoryPermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 11); static final int TRANSACTION_hasDefaults = (android.os.IBinder.FIRST_CALL_TRANSACTION + 12); static final int TRANSACTION_clearDefaults = (android.os.IBinder.FIRST_CALL_TRANSACTION + 13); static final int TRANSACTION_setCurrentFunction = (android.os.IBinder.FIRST_CALL_TRANSACTION + 14); static final int TRANSACTION_setMassStorageBackingFile = (android.os.IBinder.FIRST_CALL_TRANSACTION + 15); static final int TRANSACTION_allowUsbDebugging = (android.os.IBinder.FIRST_CALL_TRANSACTION + 16); static final int TRANSACTION_denyUsbDebugging = (android.os.IBinder.FIRST_CALL_TRANSACTION + 17); } /* Returns a list of all currently attached USB devices */ public void getDeviceList(android.os.Bundle devices) throws android.os.RemoteException; /* * Returns a file descriptor for communicating with the USB device. The * native fd can be passed to usb_device_new() in libusbhost. */ public android.os.ParcelFileDescriptor openDevice( java.lang.String deviceName) throws android.os.RemoteException; /* Returns the currently attached USB accessory */ public android.hardware.usb.UsbAccessory getCurrentAccessory() throws android.os.RemoteException; /* * Returns a file descriptor for communicating with the USB accessory. This * file descriptor can be used with standard Java file operations. */ public android.os.ParcelFileDescriptor openAccessory( android.hardware.usb.UsbAccessory accessory) throws android.os.RemoteException; /* * Sets the default package for a USB device (or clears it if the package * name is null) */ public void setDevicePackage(android.hardware.usb.UsbDevice device, java.lang.String packageName, int userId) throws android.os.RemoteException; /* * Sets the default package for a USB accessory (or clears it if the package * name is null) */ public void setAccessoryPackage( android.hardware.usb.UsbAccessory accessory, java.lang.String packageName, int userId) throws android.os.RemoteException; /* Returns true if the caller has permission to access the device. */ public boolean hasDevicePermission(android.hardware.usb.UsbDevice device) throws android.os.RemoteException; /* Returns true if the caller has permission to access the accessory. */ public boolean hasAccessoryPermission( android.hardware.usb.UsbAccessory accessory) throws android.os.RemoteException; /* * Requests permission for the given package to access the device. Will * display a system dialog to query the user if permission had not already * been given. */ public void requestDevicePermission(android.hardware.usb.UsbDevice device, java.lang.String packageName, android.app.PendingIntent pi) throws android.os.RemoteException; /* * Requests permission for the given package to access the accessory. Will * display a system dialog to query the user if permission had not already * been given. Result is returned via pi. */ public void requestAccessoryPermission( android.hardware.usb.UsbAccessory accessory, java.lang.String packageName, android.app.PendingIntent pi) throws android.os.RemoteException; /* Grants permission for the given UID to access the device */ public void grantDevicePermission(android.hardware.usb.UsbDevice device, int uid) throws android.os.RemoteException; /* Grants permission for the given UID to access the accessory */ public void grantAccessoryPermission( android.hardware.usb.UsbAccessory accessory, int uid) throws android.os.RemoteException; /* * Returns true if the USB manager has default preferences or permissions * for the package */ public boolean hasDefaults(java.lang.String packageName, int userId) throws android.os.RemoteException; /* Clears default preferences and permissions for the package */ public void clearDefaults(java.lang.String packageName, int userId) throws android.os.RemoteException; /* Sets the current USB function. */ public void setCurrentFunction(java.lang.String function, boolean makeDefault) throws android.os.RemoteException; /* Sets the file path for USB mass storage backing file. */ public void setMassStorageBackingFile(java.lang.String path) throws android.os.RemoteException; /* * Allow USB debugging from the attached host. If alwaysAllow is true, add * the the public key to list of host keys that the user has approved. */ public void allowUsbDebugging(boolean alwaysAllow, java.lang.String publicKey) throws android.os.RemoteException; /* Deny USB debugging from the attached host */ public void denyUsbDebugging() throws android.os.RemoteException; } 

Y modificar el código añadiendo ID de usuario:

 ... service.setDevicePackage( usbDevice, YOUR_APP_PACKAGE_NAMESPACE, ai.uid ); .... 

Si tienes la opción de compilar el sistema android, entonces no hay nada que no puedas hacer.

Puedes añadir

 public void onStart() { super.onStart(); mPermissionGranted = true; finish(); } 

A frameworks / base / packages / SystemUI / src / com / android / systemui / usb / UsbPermissionActivity.java

Para omitir la ventana de confirmación de permisos.

Android realmente no está diseñado para soportar este tipo de uso de la caja. Personalmente, para el uso no interactivo, me sentiría tentado a considerar el uso del controlador de serie USB en el kernel linux y saltar el apis USB de Android. Pero tendrías que estar en condiciones de modificar seriamente la instalación de Android, cambiar la configuración del núcleo y / o cargar un módulo, crear archivos de dispositivos y establecer sus permisos o propietarios, añadir un grupo unix y el permiso de Android para aplicaciones permitidas. acceder a él.

O usted puede mirar a través de la fuente de Android y deshabilitar la confirmación de usuario; Pero si no tiene una compilación android de origen para el dispositivo, esto puede ser más complicado que la idea de nivel linux, ya que la adaptación de código abierto android para ejecutar en un dispositivo de proveedor puede ser no trivial (a menos que alguien ya ofrece una de -source build que sea suficientemente funcional para el dispositivo en cuestión)

El acceso de raíz / su no se aplica a las aplicaciones en sí, sino que significa que una aplicación que sabe cómo ejecutar cualquier herramienta que su root hack deje, puede iniciar un programa de ayuda que se ejecuta como root, pero la aplicación en sí no y no poder. El uso de la raíz para instalar la aplicación en la partición del sistema podría obtener algunos permisos atípicos de Android, pero tendría que comprobar si hay alguno que le ayudaría con el usb.

De acuerdo con la documentación de los desarrolladores de Android, ya tienes permiso para el dispositivo USB conectado cuando la aplicación se inicia a través del filtro de intenciones de manifiesto. Tal vez debería intentar este enfoque y escribir un filtro para coincidir con el dispositivo que desea utilizar, para evitar que otras aplicaciones también quieren comunicarse con el dispositivo.

Vea la "Nota" en http://developer.android.com/guide/topics/connectivity/usb/host.html#permission-d

Tuve el mismo problema con la ventana emergente y nadie para hacer clic en él. Pero encontré una solución diferente (para dispositivos con raíz). El popup se genera por android en la clase UsbPermissionActivity (y que UsbPermissionActivity es iniciado por el UsbSettingsManager). Mira el Android Sourcecode para ver lo que está pasando. Lo bueno aquí es, podemos manipular el bytecode de la UsbPermissionActivity para aceptar todos los UsbDevices. Necesita la herramienta Smali / Baksmali para hacerlo. https://code.google.com/p/smali/

  1. Localice el archivo SystemUI.apk en su dispositivo
  2. adb pull path/to/SystemUI.apk en su computadora con la adb pull path/to/SystemUI.apk
  3. Descomprimir el apk
  4. Desensambla el archivo classes.dex con java -jar baksmali.jar classes.dex
  5. Encuentra el archivo UsbPermissionActivity y dentro de él encuentre la línea que dice

    invoke-virtual {p0}, Lcom/android/systemui/usb/UsbPermissionActivity;->setupAlert()V

  6. Cambie esto comentándolo y agregando dos nuevas líneas

#invoke-virtual {p0}, Lcom/android/systemui/usb/UsbPermissionActivity;->setupAlert()V const/4 v0, 0x1 iput-boolean v0, p0, Lcom/android/systemui/usb/UsbPermissionActivity;->mPermissionGranted:Z invoke-virtual {p0}, Lcom/android/systemui/usb/UsbPermissionActivity;->finish()V

  1. Ensamble con java -jar smali.jar -o classes.dex out
  2. Reemplace el classes.dex original y cierre todo de nuevo a SystemUI.apk
  3. Reemplace el SystemUI.apk original en su dispositivo con adb push services.jar path/to/SystemUI.apk o si no funciona con un filemanager ap

Una manera de lograr esto, tenga en cuenta que esto realmente no se deshace de la confirmación, sería identificar la ubicación de la checkbox de checkbox y utilizar el equivalente de Android de la clase Robot para seleccionarlo y luego seleccione OK . Usted podría escribir una aplicación que se ejecuta en segundo plano, incluso podría ser llamado por ese servicio de inicio que usted mencionó, específicamente para este propósito.

Creo que la lista blanca del accesorio que está utilizando de antemano será la mejor solución. Para hacer esto debes agregar el archivo usb_device_manager.xml en esta ubicación / data / system / users / 0
// Tenga en cuenta que 0 es ID de usuario, probablemente será 0 si no agregó más usuarios en Android pero si cambió este ID en consecuencia

Así es como debe aparecer el archivo:

 <settings> <preference package="<PACKAGE NAME OF APP YOU WANT TO START ON CONNECTIONCTION>"> <usb-accessory manufacturer="<NAME OF MANUFECTURER LIKE ONE REGISTERED IN meta-data in the manifest>" model="<MODEL NAME LIKE ONE REGISTERED IN meta-data in the manifest>" version="<VERSION LIKE ONE REGISTERED IN meta-data in the manifest>" /> </preference> 

Para un consejo como este http://www.embeddedartists.com/products/app/aoa_kit.php es:

  <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <settings> <preference package="com.embeddedartists.aoa"> <usb-accessory manufacturer="Embedded Artists AB" model="AOA Board - Basic" version="1.0" /> </preference> 

Si su sólo desea copiar / escribir en un lápiz USB puede utilizar

El siguiente método con comandos linx doCommand ("mkdir / mnt / usbhost1 / dirname")

 private boolean doCommand(String[] commands) { boolean ran = false; try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); for (String single : commands) { os.writeBytes(single + "\n"); os.flush(); } os.writeBytes("exit\n"); os.flush(); process.waitFor(); ran = true; } catch(Exception ex) { } return ran; } 

Tengo los siguientes permisos en mi manifiesto a lo siento no recuerdo cuáles son una necesidad.

 <permission android:name="com.android.example.USB_PERMISSION"/> <permission android:name= "android.permission.INSTALL_PACKAGES"/> <permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <data android:scheme="file" /> 

Si su deseo de hacer cualquier otra cosa esto puede no ser muy útil para usted lo siento

Creo que podemos hacer esto haciendo algunas modificaciones en /etc/udev . Podríamos agregar la identificación del proveedor y el identificador del dispositivo al archivo 51-android.rules .

En la primera vez, cuando necesite confirmación, puede seleccionar "siempre", incluso si el dispositivo Android se apaga y se enciende, su aplicación aún tiene permiso para acceder al USB2Serial. Sólo para decir, sólo una vez confirmar!

  • Android bulkTransfer devuelve -1 cuando lee datos pero realmente hay algunos datos en el buffer
  • El desarrollo de una aplicación de comunicación de dispositivos especiales que se conecta a través de puerto USB en Android
  • Comunicación por cable de datos Usb en Android
  • Escribir datos en USB HID usando Javascript, HTML5 o cualquier lenguaje de plataforma cruzada (compatible con Android)
  • La obtención de un cable USB conectado al evento IN / OUT utilizando EXTRA_PLUGGED no funciona
  • Android Studio no reconocerá Nexus 7 como dispositivo
  • Comunicación USB con Android / Arduino
  • ¿Por qué adb vuelve a estar sin conexión después de la cadena del dispositivo?
  • Opciones de cámara externa de Android: superposición en la parte superior de la secuencia de vídeo, sin servidor intermediario / enrutador
  • Android depura una aplicación de accesorios USB
  • Comunicación entre PhoneGap, dispositivo externo usb y modo host Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.