9

सेट करने और रीसेट करने के साथ एंड्रॉइड अलार्ममेनगर समस्या मैं सर्वर से डेटा लाने के लिए अलार्म का उपयोग करता हूं। मैं उपयोगकर्ता को अलार्म शुरू करने और रोकने का विकल्प देना चाहता हूं। इसका मतलब है कि मुझे जांचना है और देखना है कि अलार्म पहले से सेट है या नहीं। मैं कुछ कोड है कि मुझसे कहता है कि अगर अलार्म पहले से ही सेट किया गया है पाया: अलार्म पहले से ही सेट कर दिया जाताअलार्म

Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_NO_CREATE); 
found = (P!=null); 

अगर मैं इसे रद्द लेकिन अगर यह तो सेट नहीं है मैं इसे सेट (एक टॉगल की तरह)

समस्या यह केवल एक बार काम करता है। उपरोक्त कोड को मौजूदा अलार्म की जांच करने के लिए पहली बार कोई अलार्म इंगित करने के लिए शून्य वापस आ जाएगा, लेकिन जब मैं एक पॉइंटर किसी चीज़ पर लौटाता हूं तो अलार्म रद्द करने के बाद अलार्म नहीं चल रहा है।

यहाँ अलार्म

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT); 
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, P); 

स्थापित करने के लिए कोड है और यहाँ एक अलार्म को रद्द करने के कोड है:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT); 
am.cancel(P); 

मैं इसे PendingIntent दूर जाना है बनाने के लिए एक अलार्म रद्द करने के बाद कुछ रीसेट करने के लिए हूँ ।

+1

मैं सच में यकीन नहीं है क्यों आप चेक प्रदर्शन कर रहे हैं अगर एक अलार्म पहले से मौजूद है देखने के लिए। क्या आप अपनी तर्क बता सकते हैं? –

+0

मैं एक बटन चाहता था जो टॉगल चालू/बंद के रूप में कार्य करता है। ऐप-क्रैश के कारण मेरी अलार्म सेटिंग खो जाने पर भी बटन को संकेतक के रूप में उपयोग करें। जब मैं विजेट पर क्लिक करता हूं तो विजेट को अपडेट करने के लिए अलार्म का उपयोग करता है, यह एक गतिविधि खोलता है जहां उपयोगकर्ता देख सकता है कि अलार्म सेट है या नहीं। मुझे डर है कि मैं अलार्म सेट करने के बाद इसे बंद कर दूंगा और उपयोगकर्ता नहीं जानता कि यह बंद है। – Kemal

उत्तर

49

AlarmManager को रद्द करते समय FLAG_CANCEL_CURRENT के ध्वज के साथ PendingIntent का उपयोग न करें। इसके बजाय, PendingIntent रद्द स्पष्ट रूप से अलार्म रद्द करने के बाद:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent i = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0); 
am.cancel(p); 
p.cancel(); 
+1

बहुत बहुत धन्यवाद। p.cancel() यहां मदद की! – Karussell

+7

यदि आपको इसकी मदद मिली तो आपको इसे उत्तर के रूप में चिह्नित करना चाहिए। –

+1

यह +50 प्राप्त करना चाहिए क्योंकि किसी अन्य पोस्ट पते में 'लंबित इंटेन्टेंट' के साथ-साथ 'अलार्ममेनगर' को रद्द करने का कोई भी पता नहीं है, और मैं '(लंबित INTent.getBroadcast (getBaseContext(), 0, checkIntent, pendingIntent.FLAG_NO_CREATE) का उपयोग कर रहा हूं! = शून्य); 'यह जांचने के लिए कि मेरा अलार्म चल रहा है या नहीं और यह एकमात्र चीज है जो मेरी गतिविधि को पुनरारंभ किए बिना काम करती है। अच्छा काम। –