2012-05-30 85 views
0

我有一個應用程序使用gps。它工作正常,除非應用程序被迫關閉(由用戶或Android操作系統)並重新打開。然後我似乎無法關閉gps更新。 這是我的代碼:如何在應用程序關閉後刪除gps更新

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); 
    } 
} 

如果我打電話的cancelLocationUpdates()方法的確定,但重新打開應用程序(它被迫關閉後)的pendingIntent爲空,我不能removeUpdates ... 有什麼如何做到這一點?

回答

0

檢查GPS是否開啓或關閉開始活動,如下之前:

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

在代碼中使用如下的LaunchGPS和LaunchGPS選項:

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

我覺得你被點名的方法錯誤 - launchGPSOptions應該是launchGPS,反之亦然。對任何閱讀「launchGPSOptions」的人來說,都是在最近版本的android中修補的安全漏洞 - 您無法以編程方式啓用GPS - 您只能啓動選項並讓用戶啓用它(此處爲「launchGPS()」) –

2

我找到了解決方案。它是一個醜陋的,但它的工作原理:

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

希望它有幫助。

相關問題