Supresión de pop-up de acceso a dispositivos USB?

Cuando un dispositivo USB está conectado a la tableta Android, aparece una ventana emergente solicitando permiso de usuario. Quiero suprimir esto como el cliente no lo quiere. ¿Cómo debo hacerlo?

En el código:

UsbManager.requestpermission(); 

Se llama para que el dispositivo USB tenga acceso temporal.

Esto lanza un pop-up. ¿Cómo puedo suprimir el pop-up o conceder acceso al usuario de forma predeterminada?

Cuando solicitas permiso dentro de tu aplicación, parece que la casilla de verificación "usar de forma predeterminada para este dispositivo USB" no hace nada (no estoy seguro de por qué aparece esta casilla de verificación en esta ventana emergente.

En su lugar, debe registrar un gestor de intenciones para su actividad en el manifiesto:

 <activity ... ... > <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/usb_device_filter" /> </activity> 

También tiene que crear un archivo de filtro en sus recursos xml, por ejemplo res / xml / usb_device_filter:

 <?xml version="1.0" encoding="utf-8"?> <resources> <usb-device vendor-id="26214" product-id="26214" /> </resources> 

El proveedor-id y producto-id aquí tiene que ser dado en decimal – por encima de la VID y PID son 0x6666.

Lo que he dado anteriormente también funciona para un accesorio USB (es decir, donde el accesorio es el host USB y el android es el dispositivo) – en ese caso, el filtro de intención debe registrarse

 <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> 

Y también tiene que incluir el filtro de meta datos exactamente de la misma manera.

Consulte http://developer.android.com/guide/topics/connectivity/usb/accessory.html y busque la sección "Uso de un filtro de intenciones".

EDITAR

Para concluir: si registra el filtro de intenciones en función de su actividad, la ventana de permiso USB se mostrará inmediatamente cuando el dispositivo / accesorio USB esté conectado. Si el usuario comprueba la casilla "Utilizar de forma predeterminada para este dispositivo USB" y luego concede permiso, se recordará y el diálogo de permisos no se volverá a mostrar (a menos que la aplicación se desinstale o el usuario borre la acción predeterminada del administrador de aplicaciones ).

He puesto un pequeño, terrible, proyecto de ejemplo de trabajo aquí:

http://www.locusia.com/examples/permissionTest.zip

Tendrás que editar res / xml / usb_device_filter.xml, pero de lo contrario, esto te permitirá probarlo muy rápidamente.

Para servicios …

Parece que un servicio no puede recibir las intenciones USB. Conseguí alrededor de esto haciendo una actividad oculta que entonces volvería a difundir los intentos.

Lo defino en mi manifiesto así:

 <activity android:name=".activities.UsbEventReceiverActivity" android:label="YOUR APPLICATION NAME - This appears in the permission popup" android:theme="@style/Theme.Transparent" android:noHistory="true" android:excludeFromRecents="true" android:taskAffinity="com.example.taskAffinityUsbEventReceiver" android:process=":UsbEventReceiverActivityProcess" android:exported="false" > <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/usb_device_filter" /> </activity> 

(Tengo una compleja tarea / disposición del proceso en mi servicio, YMMV en esa área).

Definí la actividad como esta:

 public class UsbEventReceiverActivity extends Activity { public static final String ACTION_USB_DEVICE_ATTACHED = "com.example.ACTION_USB_DEVICE_ATTACHED"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { super.onResume(); Intent intent = getIntent(); if (intent != null) { if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { Parcelable usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); // Create a new intent and put the usb device in as an extra Intent broadcastIntent = new Intent(ACTION_USB_DEVICE_ATTACHED); broadcastIntent.putExtra(UsbManager.EXTRA_DEVICE, usbDevice); // Broadcast this event so we can receive it sendBroadcast(broadcastIntent); } } // Close the activity finish(); } } 

Y la última pieza del rompecabezas, el tema transparente (no estoy seguro, pero probablemente podría utilizar el construido en el tema androide translúcido) – res / values ​​/ styles.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="Theme.Transparent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:backgroundDimEnabled">false</item> <item name="android:windowAnimationStyle">@null</item> </style> </resources> 
  • La diferencia entre vold y udevd
  • ¿Es posible identificar el modo de comunicación USB mediante programación?
  • No se pueden obtener los elementos en la herramienta uiautomator cuando la aplicación se ejecuta en el dispositivo
  • Android SDK: cómo leer la clase de un dispositivo USB?
  • Java.io.IOException, "número de archivo incorrecto" Conexión USB
  • Android - ¿Cómo saber qué interfaz USB utilizar?
  • Opciones de cámara externa de Android: superposición en la parte superior de la secuencia de vídeo, sin servidor intermediario / enrutador
  • No se puede mostrar el dispositivo android en ubuntu 13.04
  • Android: Comunicación con un dispositivo USB que actúa como host
  • Envía datos a través de USB desde la aplicación de Android a la PC
  • Android como anfitrión de ATtiny85 Digispark
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.