सबसे पहले, कैसे पूर्व में बनाए गए अलार्म का उपयोग करने की पर एक छोटे से ट्यूटोरियल:
आप इस तरह के रूप में एक विशिष्ट आईडी के साथ प्रत्येक बनाकर अलार्म के बीच अंतर कर सकते हैं:
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
आप का उपयोग करना चाहते हैं यह अलार्म, आपको एक ही अद्वितीय आईडी के साथ एक ही लंबित इंटेंट बनाना होगा। उदाहरण के लिए, निम्नलिखित केवल उस अलार्म तक पहुंच जाएगा जिसे आपने लंबित इंटेंट आईडी 1234 के साथ बनाया था। फिर यह पिछले को रद्द कर देगा और इसे रीसेट कर देगा।
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
विचार सरल है। आईडी का ट्रैक रखें और फिर अपने संबंधित अलार्म तक पहुंचने के लिए उनका उपयोग करें। यदि आप एक ही आईडी के साथ कई अलार्म बनाते हैं, तो सबसे हालिया एक पिछले को रद्द कर देगा।
आपकी मुख्य समस्या आ रहा है, यह जांचने के बजाय कि आपका अलार्म सक्रिय है या नहीं, हर बार जब आप अपना एप्लिकेशन लॉन्च करते हैं, तो बस इसे अपनी गतिविधि के onCreate()
विधि में पुनः सेट करें। जैसा कि मैंने ऊपर वर्णित किया है वही लंबित इंटेंटेंट के साथ। यह आपको जांचने की सभी परेशानी बचाता है कि क्या अलार्म पहले सेट किया गया है या नहीं। चूंकि आपका लक्ष्य अलार्म को जीवित रखना है, इसलिए जब भी आप एप्लिकेशन लॉन्च करते हैं, तो पहले सेट सेट को ओवरराइड करने में कोई दिक्कत नहीं होगी। बस सुनिश्चित करें कि आप अपना लंबित इंटेंट बनाने के लिए एक ही आईडी का उपयोग करते हैं।
यह जांचना न भूलें कि आपके अलार्म का समय बीत चुका है या नहीं, ताकि पिछली बार अलार्म सेट करने का प्रयास करने से बचने के लिए, जो तुरंत इसे ट्रिगर करेगा।
आइए एक और मामला मानें: जब आप अपना डिवाइस बंद कर देते हैं, तो आपके सभी अलार्म रद्द कर दिए जाएंगे। यह आपको रीबूट पर फिर से सेट करने के अलावा कोई विकल्प नहीं छोड़ता है। ऐसा करने के लिए, आपको BroadcastReceiver का उपयोग करना होगा।
This answer आपको यह कैसे करने में मदद करेगा। उपर्युक्त सुझाव के अनुसार बस अपने प्रसारण को अपने ब्रॉडकास्ट रिसीवर की ऑनसेसिव() विधि में फिर से बनाएं।
वर्कग्राउंड के लिए हाय धन्यवाद ... लेकिन अगर मेरे पास कोई गतिविधि नहीं है तो क्या होगा .. फिर मेरा बूट पूरा हुआ प्रसारण रिसीवर उस मामले में काम नहीं करेगा (एंड्रॉइड संस्करण 3.0 के साथ मामला) ... तो इसके साथ कैसे आना है .. क्योंकि मैं इस तरह के ऐप पर काम कर रहा हूं कि वे कोई गतिविधि नहीं चाहते हैं ... तो उस रिसीवर को कैसे पंजीकृत करें .. – NullPointerException
आपको बस टैग का उपयोग करने की आवश्यकता है। इसे देखें: http: //developer.android.com/guide/topics/manifest/receiver-element.html। यदि आप अपना अलार्म बनाने के लिए सेवा का उपयोग कर रहे हैं, तो आपको उपरोक्त गतिविधि नाम को अपने सेवा वर्ग के नाम में बदलना होगा। –
Erol
ठीक है !!! यह मुझे सबसे अच्छा जवाब मिला है इसलिए मैं इसे पुरस्कृत करता हूं !! – NullPointerException