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:
- Tarjeta SD no disponible mientras está en modo de depuración USB en DroidX
- Micromax a111 no es detectado por adb
- Anfitrión USB Android y dispositivos ocultos
- Recibir Datos de Host Usb para Android
- ¿Cómo comunicarse con un dispositivo USB?
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?
- ¿Es posible compartir mi conexión a internet de pc a android via usb?
- Permiso ATTR {idVendor} para dispositivos USB en linux menta para utilizar tabla mobii protab2 XXL
- Cómo subir un archivo en Android a PC a través de USB
- Dispositivo USB HID para Android
- Android USB OTG: por programación, apague la alimentación del puerto
- Android bulkTransfer devuelve -1 cuando lee datos pero realmente hay algunos datos en el buffer
- No se puede instalar el controlador USB de Android en Windows 7 Pro 64 bit
- Android: habilita la conexión de USB mediante programación: hay una aplicación que lo hizo por 2,3
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>
- Estoy recibiendo "Error: No se encontró ningún recurso que coincida con el nombre dado (en el valor con valor @ integer / google_play_services_version)"
- ¿Cómo puedo especificar la ubicación de debug keystore para Android ant debug builds?