2012-12-04 7 views
5

Mam klasę detektora lokalizacji i klasę usług. W mojej klasie nasłuchiwania lokalizacji uruchamiam system GPS i ciągle otrzymuję lokalizację co 10 sekund. Moim wymaganiem jest zatrzymanie aktualizacji lokalizacji GPS codziennie o 19:00. Próbuję zatrzymać aktualizacje GPS w usłudze za pomocą removeupdates, ale to nie działa. Jak mogę to osiągnąć? Poniżej znajduje się mój kod.Jak usunąć aktualizacje lokalizacji w klasie usług w systemie Android?

LocationGPS.java

public class LocationGPS extends Activity implements LocationListener { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
public static LocationManager locationManager;  
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10*1000 , 0 ,this); 
Intent myIntent = new Intent(this, PIService.class); 
      PendingIntent sevenPMIntent = PendingIntent.getService(this, 0, myIntent, 0); 

      AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(System.currentTimeMillis()); 
      calendar.set(Calendar.HOUR_OF_DAY, 19); 
      calendar.set(Calendar.MINUTE, 0); 
      calendar.set(Calendar.SECOND, 0); 
      //alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, sevenPMIntent); 

} 

@Override  
public void onLocationChanged(Location location) {  
       Toast.makeText(getApplicationContext(), "got new location", Toast.LENGTH_SHORT).show(); 

}  

@Override 
public void onProviderDisabled(String provider) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 
@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

}  
} 

PIService.java

public class PIService extends Service{ 

@Override  
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
}   
@Override  
public int onStartCommand (Intent intent, int flags, int startId) 
{  
    super.onStartCommand(intent, flags, startId); 
    //Get the system current time. 
    Date dt = new Date(); 
    int hours = dt.getHours(); 

    //Compare the current time with 7PM 
    if(hours == 19){ 
     //if current time is 7PM 
     Toast.makeText(getApplicationContext(), "Now the time is 7PM", Toast.LENGTH_LONG).show(); 
     LocationGPS.locationManager.removeUpdates(new LocationGPS()); //here is the place i am trying to remove the location updates. 

    } 
    } 


    return START_STICKY;  
} 

} 
+0

Patrz na to pytanie to pomoże http://stackoverflow.com/questions/ 12458070/android-locationmanager-removeupdateslistener-not-removal-location- słuchacz –

+0

Zamiast umieszczać lokalizację w częstym odstępie w tle, jak mogę uzyskać lokalizację w tle, podczas gdy lokalizacja jest zmieniana tylko? – Karthick

Odpowiedz

2
public void onDestroy() { 
    Log.e(TAG, "onDestroy"); 
    super.onDestroy(); 
    if (mLocationManager != null) { 
     for (int i = 0; i < mLocationListeners.length; i++) { 
      try { 
       mLocationManager.removeUpdates(mLocationListeners[i]); 
      } catch (Exception ex) { 
       Log.i(TAG, "fail to remove location listners, ignore", ex); 
      } 
     } 
    } 
} 
+0

mLocationListeners.length określić, jak uzyskać listę słuchaczy –

1
public void onDestroy() 
{ 
locationManager.removeUpdates(this); 
super.onDestroy(); 
} 
Powiązane problemy