Je connais l'utilisation de registerReceiver et d'unregisterReceiver en code Java pour traiter les destinataires, mais supposons que mon manifeste contient les éléments suivants:
<receiver Android:name=".headsetHook">
<intent-filter Android:priority="99999999999">
<action Android:name="Android.intent.action.ACTION_HEADSET_PLUG" />
</intent-filter>
</receiver>
Est-il possible de désenregistrer cet élément quelque part dans le code Java? Pourrais-je lui attribuer un attribut id ou quelque chose puis l'obtenir et le désenregistrer? Je demande parce que je veux que mon application ne fasse quelque chose que la première fois que cette action se produit, puis la désenregistre et la réenregistre plus tard en Java.
J'espère que j'ai bien expliqué cela, merci pour toute aide.
Vous pouvez utiliser la PackageManager
pour activer/désactiver une BroadcastReceiver
dans déclarée dans le manifeste. Le Broadcast Receiver
ne sera déclenché que s'il est activé.
Utilisez ceci pour créer un composant
ComponentName component = new ComponentName(context, MyReceiver.class);
Vérifier si le composant est activé ou désactivé
int status = context.getPackageManager().getComponentEnabledSetting(component);
if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
Log.d("receiver is enabled");
} else if(status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
Log.d("receiver is disabled");
}
Activer/Désactiver le composant (Récepteur de diffusion dans votre cas)
//Disable
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);
//Enable
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP);
Sur la base de la réponse de Varun, j'ai créé cette méthode utilitaire
private void unregisterReceiverFromManifest(Class<? extends BroadcastReceiver> clazz, final Context context) {
final ComponentName component = new ComponentName(context, clazz);
final int status = context.getPackageManager().getComponentEnabledSetting(component);
if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
context.getPackageManager()
.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}