2012-09-20 26 views
26

Tengo un conjunto de alarmas que debo conservar después de reiniciar. Intenté usar un receptor de arranque pero no volverán a comenzar. No estoy seguro si entiendo el receptor de arranque y cómo reiniciar todas las alarmas. Ya tengo un receptor para mis notificaciones, pero no sé si puedo usar el mismo receptor o si necesito uno nuevo.Android AlarmManager después de reiniciar

¿Alguien podría indicarme algún buen tutorial o ayudarme?

Saludos

Código:

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);  
    } 
} 

con NotificationMenu siendo las notificaciones, por lo que estoy usando el AlarmManager

Respuesta

47

No estoy seguro si entiendo el receptor de arranque y cómo reiniciar todas las alarmas.

Simplemente llame a su código para llamar al setRepeating() (o lo que sea) en AlarmManager.

Por ejemplo, en this sample project, PollReceiver está configurado para recibir BOOT_COMPLETED. En onReceive(), se vuelve a programar las alarmas:

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); 
    } 
} 
+1

gracias por compartir pero ¿por qué no estoy viendo 'BOOT_COMPLETED' en su @CommonsWare código? – ericn

+5

@fuzzybee: Al parecer, no hizo clic en el hipervínculo en la respuesta para examinar todo el proyecto, incluido su manifiesto. – CommonsWare

+0

Mi mal, gracias @CommonsWare – ericn

Cuestiones relacionadas