J'ai travaillé la description et les échantillons pour l'hôte USB à developer.Android.com pour détecter les périphériques USB attachés et détachés.
Si j'utilise un filtre d'intention dans le fichier manifeste pour lancer mon application lorsqu'un périphérique est connecté, tout fonctionne parfaitement : Branchez, le périphérique est détecté, Android demande la permission de lancer l'application, les informations sur le périphérique sont affichées dans un tableau.
L'application que je développe ne doit pas être lancée/terminée uniquement si un appareil est attaché/détaché (par exemple, à des fins de gestion des données). De plus, je ne veux pas que la boîte de dialogue d'ouverture s'affiche si l'application est déjà en cours d'exécution. J'ai donc décidé de ne pas démarrer l'activité directement si un appareil est attaché, mais d'enregistrer un BroadcastReceiver, qui est (plus tard) censé notifier l'activité si un appareil est attaché/détaché. Ce récepteur reconnaît très bien l'action de détachement, mais pas l'action d'attachement.
Est-ce qu'il me manque une permission ou un attribut de données ou quelque chose comme ça ? Le tutoriel et les exemples ne disent rien sur les attributs supplémentaires nécessaires.
Voici le fichier du manifeste :
<?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>
Et le récepteur :
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
}
Je ne comprends pas pourquoi le même filtre d'intention fonctionne, si je l'utilise sur une activité, mais pas s'il est appliqué à un récepteur ? Même si je configure le récepteur et le filtre dans le code, les pièces jointes ne sont pas reconnues.
Mon environnement de travail : IDE : Eclipse 3.7 avec le plugin Android
Dispositif : Acer Iconia Tab A500
Android : 3.1
Merci d'avance