Selon this article, si je dois mettre en œuvre automatique supprime certaines lignes (de plus de l'heure) de ma base de données que lorsque certaines activités est ouvert, je dois utiliser ResultReceiver:Comment utiliser Resultreceiver et AlarmManager ensemble?
ResultReceiver - Interface de rappel générique pour l'envoi résultats entre service et activité. Si votre service a seulement besoin de se connecter avec son application parente dans un seul endroit, utilisez cette approche.
et AlarmManager:
Trigger à un moment précis dans l'avenir ou à un intervalle récurrent
Mais je faisais face avec le problème que je ne sais pas comment utiliser AlarmManager avec ResultReceiver. Je veux dire que je ne comprends pas comment appeler mon IntentService de l'activité.
Dans mon service intention j'ai quelque chose comme ça:
@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);
}
Et en activité:
// 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);
}
J'ai essayé de mettre en œuvre à l'intérieur AlarmManager méthode onStartService mais il ne fonctionne pas. Je pensais que ça va être comme ceci:
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);
Alors, quelqu'un peut me expliquer comment je peux mettre en œuvre AlarmManager avec IntentService? Merci.
Je viens de découvrir qu'IntentService et AlarmManager sont tous deux des "lanceurs". Donc, mon code était stupide comme l'enfer. Mais l'homme d'aide de toute façon! –