2012-05-30 3 views
0

J'ai une application qui utilise gps. Il fonctionne bien, sauf si l'application est forcée à proximité (par l'utilisateur ou l'OS Android) et rouvrir. Ensuite, je ne peux pas sembler fermer les mises à jour gps. Ceci est mon code:Comment faire pour supprimer les mises à jour GPS après la fermeture de l'application

private void registerLocationUpdates() { 
    Intent intent = new Intent(ParkOGuardActivity.class.getName() 
      + ".LOCATION_READY"); 
    pendingIntent = PendingIntent.getBroadcast(
      getApplicationContext(), 0, intent, 0); 
    // minimum every 1 minutes, 5 kilometers 
    this.locationManager.requestLocationUpdates(this.provider, 5000, 
      300000, pendingIntent); 
} 

private void cancelLocationUpdates() { 
    if(pendingIntent != null){ 
     Log.d(TAG,pendingIntent!=null ? "pending is not null" : "pending is null"); 
     this.locationManager.removeUpdates(pendingIntent); 
    } 
} 

Si je fais appel à la méthode cancelLocationUpdates() son ok, mais après la réouverture de l'application (après avoir été forcé fermer) le pendingIntent est nul et je ne peux pas removeUpdates ... Y at-il façon de le faire?

Répondre

0

Vérifiez si le GPS est activé ou désactivé avant de commencer l'activité comme suit:

LocationManager lm; 
boolean gpsOn = false; 
if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    launchGPSOptions(); 
    if (!gpsOn) launchGPS(); 
} 

Utilisez les LaunchGPS et LaunchGPS Options dans votre code comme ci-dessous:

private void launchGPSOptions() { 
    String provider = Settings.Secure.getString(getContentResolver(), 
      Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
    if (!provider.contains("gps")) { 
     final Intent poke = new Intent(); 
     gpsOn = true; 
     poke.setClassName("com.android.settings", 
       "com.android.settings.widget.SettingsAppWidgetProvider"); 
     poke.addCategory(Intent.CATEGORY_ALTERNATIVE); 
     poke.setData(Uri.parse("3")); 
     sendBroadcast(poke); 
    } 
} 

private void launchGPS() { 
    // final ComponentName toLaunch = new 
    // ComponentName("com.android.settings","com.android.settings.SecuritySettings"); 
    final Intent intent = new Intent(
      Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    intent.addCategory(Intent.CATEGORY_LAUNCHER); 
    // intent.setComponent(toLaunch); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivityForResult(intent, 0); 
} 
+0

Je pense que vous avez nommé les méthodes tort - launchGPSOptions devrait être launchGPS et vice versa. Pour quiconque lisant le "launchGPSOptions", un trou de sécurité a été corrigé dans les versions récentes d'android - vous ne pouvez pas activer le GPS par programmation - vous pouvez seulement lancer les options et laisser l'utilisateur l'activer (le "launchGPS()" ici) –

2

J'ai trouvé une solution. c'est un laid mais cela fonctionne:

private void cancelLocationUpdates() { 
    if(pendingIntent == null) { 
     registerLocationUpdates(); 
    } 
    this.locationManager.removeUpdates(pendingIntent); 
} 

espérons que cela aide.

Questions connexes