2012-09-20 99 views
26

我有一組警報,需要在重啓後保留。我試過在啓動接收器上使用,但他們不會再啓動。我不確定是否瞭解啓動接收器以及如何重新啓動所有報警。我的通知已經有一個接收器,但不知道我是否可以使用相同的接收器,或者是否需要新的接收器?Android AlarmManager重啓後

任何人都可以指向我的任何好的教程或幫助我嗎?

乾杯

代碼:

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

與NotificationMenu被通知,這就是爲什麼我使用AlarmManager

回答

47

我不知道如果我理解開機接收器以及如何重新啓動所有警報。

只需撥打您的電話號碼即可撥打setRepeating()(或其他)AlarmManager

例如,在this sample projectPollReceiver被設置爲接收BOOT_COMPLETED。在onReceive(),它重新安排報警:

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

感謝分享,但爲什麼我沒有看到你的代碼@CommonsWare'BOOT_COMPLETED'? – ericn

+5

@fuzzybee:你顯然沒有點擊答案中的超鏈接來檢查整個項目,包括其清單。 – CommonsWare

+0

我的不好,謝謝@CommonsWare – ericn