2012-09-20 19 views
26

Ich habe eine Reihe von Alarmen, die ich nach dem Neustart behalten muss. Ich habe versucht, auf einem Boot-Empfänger zu verwenden, aber sie werden nicht erneut starten. Ich bin mir nicht sicher, ob ich den Boot-Empfänger verstehe und dann alle Alarme neu starte. Ich habe bereits einen Empfänger für meine Benachrichtigungen, weiß aber nicht, ob ich den gleichen Empfänger verwenden kann oder einen neuen brauche.Android AlarmManager nach dem Neustart

Kann mir jemand auf irgendwelche guten Tutorials hinweisen oder mir helfen?

Prost

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

mit NotificationMenu Mitteilungen zu sein, weshalb ich bin ist der Alarmmanager

Antwort

47

Ich bin mir nicht sicher, ob ich den Hörer Boot verstehen verwenden und wie man dann alle Alarme neu startet.

Rufen Sie einfach Ihren Code an setRepeating() (oder was auch immer) auf AlarmManager.

Zum Beispiel wird in this sample projectPollReceiver auf BOOT_COMPLETED gesetzt. In onReceive(), Umplanungen es die Alarme:

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

Dank für die gemeinsame Nutzung, aber warum bin ich nicht 'BOOT_COMPLETED' in Ihrem Code @CommonsWare sehen? – ericn

+5

@fuzzybee: Sie haben anscheinend nicht auf den Hyperlink in der Antwort geklickt, um das gesamte Projekt einschließlich seines Manifests zu untersuchen. – CommonsWare

+0

Meine schlechte, danke @CommonsWare – ericn