Android AlarmManager après le redémarrage
J'ai un ensemble d'alarmes que j'ai besoin de garder après le redémarrage. J'ai essayé de l'utiliser sur un démarrage récepteur, mais ils ne vont pas recommencer. Je ne suis pas sûr si je comprends le démarrage du récepteur et comment puis redémarrer toutes les alarmes. J'en ai déjà un récepteur pour mes avis, mais ne sais pas si je peux utiliser le même récepteur ou si j'ai besoin d'un nouveau?
Quelqu'un pourrait-il m'indiquer tout bon tutoriels ou m'aider?
Acclamations
Code :
DatabaseHandler db = new DatabaseHandler(this);
List<UAlarm> alarms = db.getAllAlarms();
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
for (UAlarm ua : alarms) {
String programme = ua.getTitle();
String startTime = ua.getStart();
String endTime = ua.getEnd();
String nowPlaying = ua.getChannel();
db.addAlarm(new UAlarm(programme, startTime, endTime, nowPlaying, ""));
final UAlarm ut = new UAlarm();
ut.setTitle(programme);
ut.setStart(startTime);
ut.setEnd(endTime);
ut.setChannel(nowPlaying);
ut.setId(db.getLastEntered());
String [] bla = startTime.split(":");
int hour = Integer.parseInt(bla[0].trim());
int minute = Integer.parseInt(bla[1].trim());
minute -= 2;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
Intent intenta = new Intent(this, NotificationMenu.class);
String name = programme;
intenta.putExtra("name", name);
intenta.putExtra("id", db.getLastEntered());
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, ua.getId(),
intenta, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), pendingIntent);
}
}
avec NotificationMenu être les notifications, c'est pourquoi je suis en utilisant le AlarmManager
Vous devez vous connecter pour publier un commentaire.
Il suffit d'appeler votre code pour appeler
setRepeating()
(ou autre) surAlarmManager
.Par exemple, dans cet exemple de projet,
PollReceiver
est configuré pour recevoirBOOT_COMPLETED
. DansonReceive()
, il reporte les alarmes:BOOT_COMPLETED
dans votre code @CommonsWare?0
pour le paramètre flags dansPendingIntent.getService()
permettra d'éviter plus d'être transmise au récepteur.PendingIntent
être changé.PendingIntent.FLAG_UPDATE_CURRENT
aujourd'Hui, ce n'est pas le cas. Désolé - je ne veux pas induire en erreur mais je suppose que la Twilight Zone est vrai 😀PendingIntent.FLAG_UPDATE_CURRENT
0
signifie "ne pas mettre à jour les extras". Donc, si vous n'avez pas un extra avec cette touche lorsque lePendingIntent
a d'abord été créé, vous ne pouvez pas se retrouver avec supplémentaire lorsque vous essayez de créer un équivalentPendingIntent
plus tard. Si vous êtes à l'aide de figurants, à l'aide de l'un des indicateurs (par exemple,FLAG_UPDATE_CURRENT
) est une bonne idée. Si vous n'êtes pas à l'aide de suppléments, vous n'en avez pas besoin. Dans mon exemple, je ne suis pas à l'aide de suppléments.startWakefulService
à partir d'un WakefulBroadcastReceiver, à cause de certaines choses que j'ai lues sur l'appareil de sommeil avant que le service commence)WakeLock
, mais plutôt à l'aide de l'un dansWakefulBroadcastReceiver
, et si "fonctionner pendant un certain temps avant qu'il est fini" c'est juste une question de tempsonHandleIntent()
, vous devriez être OK, si votre travail est à peu près sûr d'être fait en moins d'une minute. C'est le temps maximumWakefulBroadcastReceiver
tiendra saWakeLock
automatiquement avant de le relâcher. Si votre travail peut être plus long que ça, alorsWakefulBroadcastReceiver
etIntentService
peut-être pas le meilleur modèle pour vous.OnHandleIntent
. Existe-il des problèmes en raison de sa nature asynchrone?onHandleIntent()
. C'est l'une des nombreuses raisons pour lesquelles je n'utilise pas de Volley-il n'est pas suffisamment flexible pour une utilisation tant à partir de l'INTERFACE utilisateur et les threads d'arrière-plan. Il y a des recettes pour faire des requêtes synchrones avec terrain de Volley -, mais ils semblaient comme s'ils étaient des solutions de contournement pour un fondamental de la bibliothèque de limitation. Je suis un OkHttp ventilateur. 🙂