2

Possible en double:
Android: how to cancel a request of Location update with intent?Le gestionnaire de localisation ne supprime pas les mises à jour de localisation!

Je tente de désactiver une intention dans l'attente (de diffusion) que je l'ai déjà créé dans une autre activité, mais je ne peux pas le faire fonctionner. J'ai lu que je devais recréer l'intention (avec les mêmes extras et tout), le passer en paramètre afin que je puisse instancier le pendingIntent, puis passer le pendingIntent en tant que paramètre à la méthode removeUpdates des gestionnaires d'emplacements.

En d'autres termes:


Bundle extra = new Bundle(); 

extra.putString("name", extras.getString("poiName")); //create same extras 

extra.putInt("id", extras.getInt("rowId")); //create same extras 

Intent intent = new Intent(PROX_ALERT_INTENT); 

intent.putExtra(PROX_ALERT_INTENT, extra); //put same extras in the intent 

PendingIntent proximityIntent = PendingIntent.getBroadcast(this.getApplicationContext(),extras.getInt("rowId") , intent, PendingIntent.FLAG_UPDATE_CURRENT); //pass in the intent 

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
               locationManager.removeUpdates(proximityIntent); //remove pendingIntent 

qui ne fonctionnait pas si je pensais qu'il pourrait avoir à faire avec l'intention que im passant d'être un nouvel objet et non pas le même avec celui utilisé pour créer l'intention en attente.

J'ai donc essayé de retirer le pendingIntent juste après que je crée mais qui ne fonctionnait pas non plus:

Bundle extras = new Bundle(); 

    extras.putString("name", poiName); 

    extras.putInt("id", requestCode); 

    Intent intent = new Intent(PROX_ALERT_INTENT); 

    intent.putExtra(PROX_ALERT_INTENT, extras); 

    PendingIntent proximityIntent = PendingIntent.getBroadcast(this.getApplicationContext(), requestCode , intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    locationManager.addProximityAlert(
     latitude, // the latitude of the central point of the alert region 
     longitude, // the longitude of the central point of the alert region 
     POINT_RADIUS, // the radius of the central point of the alert region, in meters 
     PROX_ALERT_EXPIRATION, // time for this proximity alert, in milliseconds, or -1 to indicate no expiration 
     proximityIntent // will be used to generate an Intent to fire when entry to or exit from the alert region is detected 
    ); 
    locationManager.removeUpdates(proximityIntent); 

Pouvez-vous s'il vous plaît me aider ??? Son été mise sur écoute depuis mercredi être ... voudrais avoir plus la réputation de mettre un Boundy sur celui-ci ...

Merci

Mike

+0

Mike, si vous créez un PendingIntent puis requestLocationUpdates(), vous devez supprimer removeUpdates() sur cet objet * PendingIntent *. Vous ne pouvez pas utiliser un * nouveau * PendingIntent() ou Intent .. vous devrez obtenir l'original PendingIntent à la deuxième activité en quelque sorte. – DJC

+0

@DJC J'ai réussi à obtenir ce travail en recréant et en annulant l'intention en attente ... apparemment ce n'est pas grave si ce n'est pas l'objet réel tant que vous passez dans une intention avec exactement les mêmes extras et vous pouvez obtenir en attente intention que vous avez déjà créé ... un peu bizarre mais ça marche ... merci pour la réponse de toute façon ... – mixkat

+0

@DJC Eh bien maintenant que j'y pense ... vous écrasez fondamentalement l'objet pendingIntent précédent pour qu'il cesse d'exister et le nouveau prend sa place ... donc vous avez une référence réelle à l'intention en attente et vous pouvez alors l'annuler :) – mixkat

Répondre

4

résolu en recréant l'intention, puis en appelant .cancel () sur l'intention en attente ...

Questions connexes