LocationManager.removeUpdates(auditeur) ne pas enlever de l'emplacement de l'auditeur

Mon scénario d'application est que je veux suivre les employés de l'emplacement. J'ai un broadcastreceiver qui est à l'écoute de démarrage des périphériques, de diffusion et d'enregistrer un gestionnaire d'alarme. Lorsque l'alarme gestionnaire de tiques, il enregistre deux auditeurs, l'un pour écouter le gps et d'autres pour le réseau. Je veux que quand je suis au premier emplacement de mise à jour dans onLocationChange() la méthode, l'emplacement d'enregistrement et annuler l'inscription de ce lieu auditeur de sorte que lorsque l'alarme gestionnaire de tiques de nouveau, il ne fait pas doublon. Pour annuler l'enregistrement, j'ai emplacement auditeurs comme des objets statiques à accès onLocationChange(). Mais j'ai constaté que ce n'est PAS la suppression de l'emplacement de l'auditeur. Voici mon exemple de code:

 public class BootTimeServiceActivator extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO Auto-generated method stub
Calendar calendar = Calendar.getInstance();
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent mIntent = new Intent(context, MyBroadCastReceiver.class);
PendingIntent mPendingIntent = PendingIntent.getBroadcast(context, 0, mIntent, PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 20 * 60 * 1000, mPendingIntent);
}
}
//..........
public class MyBroadCastReceiver extends BroadcastReceiver{
public static LocationManager locationManager;
public static MyLocationListener networkLocationListener;
public static MyLocationListener gpsLocationListener;
@Override
public void onReceive(Context context, Intent intent) {
//TODO Auto-generated method stub
Toast.makeText(context, "Alarm has been called...", Toast.LENGTH_SHORT).show();
initLocationListeners(context);
registerLocationListeners();
}
public void initLocationListeners(Context context) {
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
networkLocationListener = new MyLocationListener(context);
gpsLocationListener = new MyLocationListener(context);
}
public void registerLocationListeners() {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0, gpsLocationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 0, gpsLocationListener);
}
}
\\.....
public class MyLocationListener implements LocationListener {
Context context;
public MyLocationListener(Context context) {
this.context = context;
}
@Override
public void onLocationChanged(Location location) {
if(location != null) {
SDCardService sdService = new SDCardService(context);
try {
sdService.logToDB(location);
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("provider",location.getProvider());
if(location.getProvider().equals(LocationManager.GPS_PROVIDER)) {
MyBroadCastReceiver.locationManager.removeUpdates(MyBroadCastReceiver.gpsLocationListener);
}
else if(location.getProvider().equals(LocationManager.NETWORK_PROVIDER)) {
MyBroadCastReceiver.locationManager.removeUpdates(MyBroadCastReceiver.networkLocationListener);
}
}
}

Quelqu'un peut-il me guider où je me trompe?

OriginalL'auteur Khawar Raza | 2012-09-17