2012-09-20 29 views
26

Yeniden başlatmanın ardından beklemem gereken bir dizi alarm var. Bir önyükleme alıcısını kullanmayı denedim ama yine başlamayacaklar. Önyükleme alıcısını ve tüm alarmların nasıl yeniden başlatılacağını anladığımdan emin değilim. Bildirimlerim için zaten bir tane alıcım var, fakat aynı alıcıyı kullanıp kullanamayacağımı mı yoksa yeni birime mi ihtiyacım olduğunu bilmiyor muyum?Android Alarm Yöneticisi yeniden başlatıldıktan sonra

Bana herhangi bir iyi öğreticiyi yönlendirebilir veya bana yardım edebilir misiniz?

Alkış

Kodu: NotificationMenu bildirimleri olmak

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

, ben AlarmManager

cevap

47

kullanıyorum neden çizme alıcısı anlamak emin değilim olduğunu ve sonra tüm alarmları yeniden başlatır.

Kodunuzu3 (ya da her neyse) AlarmManager numaralı telefondan arayın. this sample project Örneğin

, PollReceiver BOOT_COMPLETED almak üzere ayarlanmıştır. onReceive(), bu alarmları reschedules: Paylaşım için

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

Teşekkür ama neden kodunuzu @CommonsWare içinde 'BOOT_COMPLETED' görmüyorum? – ericn

+5

@fuzzybee: Açıkça görüldüğü gibi, projenin tamamını incelemek için cevaptaki köprüyü tıklamayı başarmışsınız. – CommonsWare

+0

Benim hatam, @CommonsWare – ericn