Trabajé a través de the description and samples for USB host at developer.android.com para detectar dispositivos USB conectados y desconectados.Android 3.1 USB-Host - BroadcastReceiver no recibe USB_DEVICE_ATTACHED
Si utilizo un filtro de intención en el archivo de manifiesto para iniciar mi aplicación cuando se conecta un dispositivo, funciona perfectamente bien: Enchúfalo, se detecta el dispositivo, Android solicita permiso para iniciar la aplicación, se muestra la información del dispositivo en una mesa
La aplicación que estoy desarrollando no debe iniciarse/finalizarse solo si un dispositivo está conectado/desconectado (por ejemplo, con fines de gestión de datos). Además, no quiero que aparezca el cuadro de diálogo abierto si la aplicación ya se está ejecutando. Así que decidí no iniciar la actividad directamente si un dispositivo está conectado, sino registrar un BroadcastReceiver, que (más tarde) se supone que notifica la actividad si un dispositivo está conectado/desconectado. Este receptor reconoce la acción de separación muy bien, pero no la acción de adjuntar.
¿Echo de menos un permiso o atributo de datos o algo así? El tutorial y las muestras no dicen nada sobre los atributos adicionales necesarios.
Aquí está el archivo de manifiesto:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="de.visira.smartfdr"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />
<uses-feature android:name="android.hardware.usb.host" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".usb.Detector">
<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" />
</receiver>
</application>
y el receptor:
public class FDRDetector extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(context, "Action: " + action, 3).show();
// pops up only if action == DETACHED
}
No entiendo por qué los mismos trabajos de filtro intención, si los uso en una actividad, pero no si se aplican a un receptor? Incluso si configuro el receptor y filtro en el código, los archivos adjuntos no son reconocidos.
Mi ambiente de trabajo: IDE: Eclipse 3.7 con Android Plugin
Dispositivo: Acer Iconia Tab A500
Android: 3.1
Gracias de antemano
Intenta anular onNewIntent() - se invoca cuando utiliza android: launchMode = "singleTop" y probablemente resuelva su situación bastante bien. onResume() siempre se llama después. – Gusdor
¿Puedes explicar tu primer párrafo "La esencia de esto es"? Me parece muy confundido. –
Gracias, me he estado preguntando lo mismo. Es bueno saber que es algo que simplemente no funciona. Huele como un error de Android para mí. – Brian