Bonjour à toutes et à tous,
J'écoute l'activation ou la désactivation du GPS à l'aide d'un broadcast receiver abonné à android.location.PROVIDERS_CHANGED.
Lorsque le GPS est désactivé, j'aimerai afficher une modal. Pour ce faire, j'utilise le code suivant :
Ma modal s'affiche bien. Cependant elle s'affiche 2 fois. En effet, lorsque je coupe le GPS mon onReceive est appelé 2 fois : désactivation du réseau et désactivation du gps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class GPSReceiver extends BroadcastReceiver { public GPSReceiver() { } @Override public void onReceive(Context context, Intent intent) { final LocationManager manager = (LocationManager) context .getSystemService(Context.LOCATION_SERVICE); boolean gps = manager.isProviderEnabled(LocationManager.GPS_PROVIDER); boolean network = manager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!gps || !network) { Intent popup = new Intent(context, ModalActivity.class); popup.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(popup); } }
J'ai essayer plusieurs solutions :
1) J'ai essayé en démarrant mon activité avec Intent.FLAG_ACTIVITY_SINGLE_TOP mais j'ai eu l'erreur suivante :
2) J'ai aussi essayé de démarrer mon activité avec les deux flags (NEW_TASK et SINGLE_TOP) mais j'ai toujours 2 modales.Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
3) J'ai aussi essayé d'ajouter un booléen en variable statique afin de savoir si ma modal était déjà ouverte. Cependant, j'ai l'impression que les 2 appel à onReceive se font en même temps. Du coup, cette variable est modifier après l'appel au deux modales.
4) J'ai essayé d'ajouter une variable afin de savoir si je suis déjà passé dans ma fonction onReceive. Dans ce cas, je voulais sortir de la fonction sans appel à la modal. Cependant, même problème que le point 3, mes 2 modales s'affichent étant données que ma variable est modifiée trop tard.
Avez vous déjà rencontré se problème? Avez vous une solution ?
Merci d'avance.
Partager