Jump to content

[Résolu]Appeler une méthode externe depuis un onReceive


prosper4tie

Recommended Posts

Bonjour à tous,

Je sèche actuellement sur un problème qui ne doit pas en être un ;)

Je développe en java depuis pas mal de temps mais je n'ai pas encore l'habitude des specs Android avec les intents et tout ce qui tourne autour.

Donc voilà j'ai crée une Activity qui se charge de fixer une alarme grâce à l'AlarmManager, elle se charge également de charger une notification dans la SatusBar.

Tout se passe bien, mon alarme de déclenche, j'exécute mon traitement dans la méthode onReceive (étendue de BroadcastReceiver), mais j'ai besoin à la fin d'effacer ma notification créée précédemment dans mon Activity.

Et là je comprends pas comment faire, faut-il appeler la méthode de mon Activity, du genre MaClasse.this.maMethodQuiEfface(), à priori non car le compilateur me retourne une erreur.

Faut-il attraper un évènement dans l'Activity du genre mon onReceive se termine correctement ? si c'est le cas je n'ai pas trouvé.

Je vous remercie par avance de vos éclaircissements ;)

Link to comment
Share on other sites

bah efface ta notification à la fin de onReceive.....

pour choper le service de notification tu as du faire getSystemService(xxx)

là tu le fais avec ton Context local en paramètre du onReceive:

onReceive(Context toto.....

toto.getSystemService(xxxxx)

et tu vire ta notification.

edit:

le plus simple serait de réécrire taMethodeQuiEfface

avec un Context en paramètre et en static ....

Comme ça dans l'activity tu peux l appeler avec MaMethodequiEfface(this)

et dans le broadcast avec context en paramètre.

Link to comment
Share on other sites

Merci pour ces infos.

Désolé pour le silence mais n'étant actuellement pas chez moi, je peux pas tester mais l'idée me parait correcte.

Par contre la méthode clear() du notification manager demande un pendingIntent en paramètre, auquel je n'ai pas accès, enfin de mémoire.

Je teste tout ça en rentrant, merci bien.

Link to comment
Share on other sites

Et si mes souvenirs sont bons tu peux aussi faire un clear par l'ID de la notification.
C'est cette solution que je retiendrais, si tu n'as qu'une notification par application tu peux mettre un ID arbitraire en constante et l'utiliser dans toute ton appli :)
Link to comment
Share on other sites

Effectivement le NotificationManager demande uniquement l'ID pour supprimer la notification.

Du coup tout fonctionne parfaitement, ce qui donne dans le OnReceive()

public class WakeUpReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
       try {
           [...]
           NotificationManager notifManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
           notifManager.cancel(WakeUp.WakeUp_ID);
       } catch (Exception r) {
           Toast.makeText(context, "Erreur.",Toast.LENGTH_SHORT).show();
           r.printStackTrace();
       }
   }
}

Merci à tous

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...