web-dev-qa-db-fra.com

Android AlarmManager après le redémarrage

J'ai un ensemble d'alarmes que je dois conserver après le redémarrage. J'ai essayé d'utiliser un récepteur de démarrage, mais ils ne redémarreront pas. Je ne sais pas si je comprends le récepteur de démarrage et comment redémarrer ensuite toutes les alarmes. J'ai déjà un récepteur pour mes notifications, mais je ne sais pas si je peux utiliser le même récepteur ou si j'en ai besoin d'un nouveau?

Quelqu'un pourrait-il m'indiquer de bons tutoriels ou m'aider?

À votre santé

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 étant les notifications, c'est pourquoi j'utilise AlarmManager

28
user1281053

Je ne sais pas si je comprends le récepteur de démarrage et comment redémarrer ensuite toutes les alarmes.

Appelez simplement votre code pour appeler setRepeating() (ou autre) sur AlarmManager.

Par exemple, dans cet exemple de projet , PollReceiver est configuré pour recevoir BOOT_COMPLETED. Dans onReceive(), il replanifie les alarmes:

package com.commonsware.Android.schedsvc;

import Android.app.AlarmManager;
import Android.app.PendingIntent;
import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
import Android.os.SystemClock;

public class PollReceiver extends BroadcastReceiver {
  private static final int PERIOD=5000;

  @Override
  public void onReceive(Context ctxt, Intent i) {
    scheduleAlarms(ctxt);
  }

  static void scheduleAlarms(Context ctxt) {
    AlarmManager mgr=
        (AlarmManager)ctxt.getSystemService(Context.ALARM_SERVICE);
    Intent i=new Intent(ctxt, ScheduledService.class);
    PendingIntent pi=PendingIntent.getService(ctxt, 0, i, 0);

    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME,
                     SystemClock.elapsedRealtime() + PERIOD, PERIOD, pi);
  }
}
47
CommonsWare