Nach this article, wenn ich den automatischen Löschen bestimmte Zeilen (älter als aktuelle Zeit) implementieren, muß aus meiner Datenbank nur dann, wenn bestimmte Aktivität offen ist, ich habe ResultReceiver verwenden:Wie werden ResultReceiver und AlarmManager zusammen verwendet?
ResultReceiver - Generic Callback-Schnittstelle für das Senden Ergebnisse zwischen Service und Aktivität. Wenn sich Ihr Dienst nur an einer zentralen Stelle mit der übergeordneten Anwendung verbinden muss, verwenden Sie diesen Ansatz.
und Alarmmanager:
Auslöser zu einem bestimmten Zeitpunkt in der Zukunft oder in einem wiederkehrenden Intervall
Aber ich konfrontierte mit Problem, dass ich weiß nicht, wie Alarmmanager mit ResultReceiver zu verwenden. Ich meine, ich verstehe nicht, wie ich meinen IntentService von Activity aus aufrufen soll.
In meinem Intent Service Ich habe so etwas wie das:
@Override
protected void onHandleIntent(Intent intent) {
Log.d(LOG_TAG, "Inside onHandleIntent");
ResultReceiver rec = intent.getParcelableExtra(IntentConstants.UPDATE_REMINDERS_SERVICE_RECEIVER);
int rowsDeleted = notificationService.deleteAllOld(Calendar.getInstance().getTimeInMillis());
Bundle bundle = new Bundle();
bundle.putString(IntentConstants.UPDATE_REMINDERS_SERVICE_NOTIFICATIONS_DELETED, "Rows deleted: " + rowsDeleted);
// Here we call send passing a resultCode and the bundle of extras
rec.send(Activity.RESULT_OK, bundle);
}
Und Aktivität:
// Starts the IntentService
public void onStartService() {
Log.d("UpdateRemindersLog", "Inside onStartService");
final Intent i = new Intent(this, UpdateRemindersService.class);
i.putExtra(IntentConstants.UPDATE_REMINDERS_SERVICE_RECEIVER, remindersReceiver);
startService(i);
}
Ich habe versucht Alarmmanager innerhalb onStartService Methode zu implementieren, aber es funktioniert nicht. Ich dachte, es wird so sein:
Intent intent = new Intent(getApplicationContext(), UpdateRemindersReceiver.class);
intent.putExtra(IntentConstants.UPDATE_REMINDERS_SERVICE_RECEIVER, remindersReceiver);
// Create a PendingIntent to be triggered when the alarm goes off
final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, UpdateRemindersService.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
long firstMillis = System.currentTimeMillis(); // alarm is set right away
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, 10*1000, pendingIntent);
So kann jemand mir erklären, wie ich mit Alarmmanager IntentService umsetzen können? Danke.
Ich habe gerade herausgefunden, dass IntentService und AlarmManager beide "Launcher" sind. Also mein Code war dumm wie die Hölle. Aber thx Mann um Hilfe auf jeden Fall! –