2013-03-22 96 views
0

Splash ActivityonResume(),我啓動服務這樣無法停止LocationListener的服務

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
Intent i = new Intent(this, LocationService.class); 
PendingIntent pi = PendingIntent.getService(this, 0, i, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
am.cancel(pi); 
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
         ystemClock.elapsedRealtime() + 20000, 60000, pi); 

onStop(),我停止服務這種方式

stopService(new Intent(this, LocationService.class)); 

服務類是:

public class LocationService extends Service implements LocationListener { 

    private LocationManager mgr; 

    @Override 
    public IBinder onBind(Intent arg0) { 

     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     mgr = (LocationManager) getSystemService(LOCATION_SERVICE); 
     //get Location details 
     mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
       10 * 60 * 1000, 50, this); 

     return START_NOT_STICKY; 

    } 

    private void dumpLocation(Location l) { 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

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

    @Override 
    public void onDestroy() { 

     super.onDestroy(); 
     mgr.removeUpdates(this); 
    } 
} 

一旦我停止Splash ActivityonStop()的服務,LocationServiceonDestroy()被觸發(這意味着服務停止?),但仍在運行AlarmManager後指定的一分鐘後。

回答

1

將警報的掛起的意圖存儲在一個變量中。當服務結束時呼叫取消。

+0

在停止服務之前,從'onResume()'中刪除'am.cancel(pi);'並在'onStop()'中使用它? – 2013-03-22 07:59:25

+0

不,因爲你的活動擁有警報,所以應該停止它。但是,如果您希望服務停止時警報停止,則應在服務停止時取消該意圖 - 將兩個呼叫依次進行。如果您不希望鬧鈴在不在前臺時關閉,請在onStop中保留取消。 – 2013-03-22 08:03:04

+0

是的。有效。非常感謝。 – 2013-03-22 08:09:59