Вы можете передать дополнительное значение намерения как 1 час (или любое) из текущего системного времени. Затем вы можете проверить это значение внутри события onBind () сервиса и сравнить его. Ниже приведен пример:
//your code:
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent1 = new Intent(C2DMReceiver.this, GPSSetting.class);
//my code:
intent1.putExtra("end", System.currentTimeMillis() + 3600000); //current time plus 1 hour
//your code:
PendingIntent pendingIntent = PendingIntent.getService(
C2DMReceiver.this, 0, intent1, 0); //You might wanna give PendingIntent.FLAG_UPDATE_CURRENT as flag.
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), intervalTime,
pendingIntent);
Затем внутри метода onBind ():
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
long end = intent.getLongExtra("end", 0);
if(end <= System.currentTimeMillis()){
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(
this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pendingIntent);
}
return null;
}
Не уверен, что он будет работать для служб, но он работал для BroadcastReceiver.