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
Vous devez vous connecter pour publier un commentaire.
Essayer..
OriginalL'auteur raghav chopra
Ahh... j'ai une erreur de typo. En fait dans MyBroadCastREciever de classe I a été l'inscription gpsListener deux fois:
qui y du port d'écoute du réseau n'a pas été supprimé.
oui, parce que je ne veux qu'un seul emplacement de mise à jour.
OriginalL'auteur Khawar Raza
vous pouvez le faire de cette façon avec un initié de la classe et de supprimer l'auditeur onPause() :
OriginalL'auteur Shayan Shafiee