¿Supresión emergente de acceso al dispositivo USB?

Cuando un dispositivo USB está conectado a la tableta Android, aparece una ventana emergente que solicita permiso del usuario. Quiero suprimir esto ya que el cliente no lo quiere. ¿Cómo debo ir sobre eso?

En el código:

UsbManager.requestpermission(); 

es llamado para dar acceso temporal al dispositivo USB.

Esto arroja una ventana emergente. ¿Cómo suprimo la ventana emergente o concedo acceso al usuario de forma predeterminada?

Cuando solicita permiso dentro de su aplicación, parece que la checkbox “usar de forma predeterminada para este dispositivo USB” no hace nada (no estoy seguro de por qué esta checkbox incluso aparece en esta ventana emergente).

En su lugar, debe registrar un controlador de intención para su actividad en el manifiesto:

       

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

 < ?xml version="1.0" encoding="utf-8"?>    

El ID de proveedor y el Id de producto aquí se deben dar en decimal, tanto el VID como el PID son 0x6666.

Lo que he dado arriba 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

  

y también debe incluir el filtro de metadatos 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 intención”.

EDITAR

Para concluir: si registra el filtro de intenciones en contra de su actividad, la ventana de permiso de USB se mostrará inmediatamente cuando se conecte el dispositivo / accesorio USB. Si el usuario marca la casilla “usar de forma predeterminada para este dispositivo USB” y luego otorga permiso, esto se recordará y el cuadro de diálogo de permisos no se mostrará nuevamente (a menos que la aplicación se desinstale o el usuario borre la acción predeterminada del administrador de aplicaciones) )

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

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

Necesitará editar res / xml / usb_device_filter.xml, pero de lo contrario esto debería permitirle probarlo muy rápidamente.

Para servicios …

Parece que un servicio no puede recibir los bashs de USB. Entendí esto haciendo una actividad oculta que luego retransmitiría los bashs.

Lo defino en mi manifiesto de esta manera:

       

(Tengo un diseño complejo de tareas / procesos en mi servicio, YMMV en esa área).

Definí la actividad de esta manera:

 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 es probable que puedas usar el tema translúcido incorporado de Android) – res / values ​​/ styles.xml:

 < ?xml version="1.0" encoding="utf-8"?>