2012-09-20 21 views
26

0 के बाद एंड्रॉइड अलार्ममेनगर मेरे पास अलार्म का एक सेट है जिसे मुझे रीबूट के बाद रखने की आवश्यकता है। मैंने बूट रिसीवर पर उपयोग करने का प्रयास किया है लेकिन वे फिर से शुरू नहीं होंगे। मुझे यकीन नहीं है कि क्या मैं बूट रिसीवर को समझता हूं और फिर सभी अलार्म को फिर से शुरू कैसे करता हूं। मेरे पास पहले से ही मेरी अधिसूचनाओं के लिए एक रिसीवर है, लेकिन मुझे नहीं पता कि मैं एक ही रिसीवर का उपयोग कर सकता हूं या मुझे एक नया चाहिए?रीबूट

क्या कोई मुझे किसी भी अच्छे ट्यूटोरियल पर इंगित कर सकता है या मेरी मदद कर सकता है?

चीयर्स

कोड:

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

उपयोग कर रहा हूँ अगर मैं बूट रिसीवर को समझने मैं सुनिश्चित नहीं हूं और फिर सभी अलार्म को पुनरारंभ कैसे करें।

AlarmManager पर setRepeating() (या जो भी) को कॉल करने के लिए बस अपना कोड कॉल करें।

उदाहरण के लिए, this sample project में, PollReceiverBOOT_COMPLETED प्राप्त करने के लिए सेट है। onReceive() में, यह अलार्म reschedules:

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

@ फ़ज़ीबी: आप स्पष्ट रूप से पूरे प्रोजेक्ट की जांच करने के उत्तर में हाइपरलिंक पर क्लिक करने में असफल रहे, जिसमें इसके मैनिफेस्ट भी शामिल हैं। – CommonsWare

+0

मेरा बुरा, धन्यवाद @ कॉमन्सवेयर – ericn

संबंधित मुद्दे