0

a Splash Activity'sonResume()では、このようにサービスを開始します

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 Activityトリガーされます (サービスが停止したことを意味しますか?) が、サービスで指定された 1 分後に実行されます。onStop()onDestroy()LocationServiceAlarmManager

4

1 に答える 1

1

アラームの保留中のインテントを変数に格納します。サービスが終了したら、cancel を呼び出します。

于 2013-03-22T07:56:11.743 に答える