2011-08-31 14 views
9

मैं जहाँ मैं सरणी से अलार्म सेट करने के लिए है, लेकिन केवल एक अलार्म सेट और एक समय जो सरणी के अंतिम स्थिति कारण है कि यह इस निम्नलिखित की तरह बर्ताव कर रही है पर है पर काम कर रहा है एक छोटा सा एप्लिकेशन बनाने हूँ मेरी कोड हैएंड्रॉइड में एक समय में एक से अधिक अलार्म कैसे सेट करें?

AlarmManager[] alarmManager=new AlarmManager[24]; 
       for(f=0;f<arr2.length;f++) 
       { 
        Intent intent = new Intent(AlarmR.this, Riciving.class); 
        pi=PendingIntent.getBroadcast(AlarmR.this, 0,intent, 0); 

        alarmManager[f] = (AlarmManager) getSystemService(ALARM_SERVICE); 
        alarmManager[f].set(AlarmManager.RTC_WAKEUP,arr2[f] ,pi); 

        } 

अग्रिम

+0

आप उपयोग कर सकते हैं इस [एक से अधिक अलार्म] (http://www.satyakomatineni.com/akc/display?url=displaynoteimpurl&ownerUserId=satya&reportId=3503) – Uttam

+0

@Uttam शामिल Utils.getTimeAfterInSecs (45); काम नहीं कर रहा है क्योंकि कोई आंतरिक वर्ग उपयोग नहीं है, इसलिए मैं उसी – Nitin

+0

को कैसे प्राप्त कर सकता हूं हैलो क्या आप एक ही समय में रिसीवर एकाधिक अलार्म के साथ पूर्ण कोड पोस्ट कर सकते हैं .. –

उत्तर

22

आपके pendingIntent पर आपको दूसरी requestCode को एक अद्वितीय संख्या में सेट करने की आवश्यकता है। मैं आम तौर पर एक लूप के माध्यम से सरणी चलाता हूं और सरणी में प्रत्येक आइटम के लिए अनुरोध कोड गतिशील रूप से सेट करता हूं। requestCode के बिना अलार्म एक-दूसरे को ओवरराइट कर रहे हैं।

AlarmManager[] alarmManager=new AlarmManager[24]; 
intentArray = new ArrayList<PendingIntent>(); 
for(f=0;f<arr2.length;f++){ 
    Intent intent = new Intent(AlarmR.this, Riciving.class); 
    pi=PendingIntent.getBroadcast(AlarmR.this, f,intent, 0); 

    alarmManager[f] = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager[f].set(AlarmManager.RTC_WAKEUP,arr2[f] ,pi); 

    intentArray.add(pi); 

} 

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

तो आपको उन्हें रद्द करने की जरूरत है:

private void cancelAlarms(){ 
    if(intentArray.size()>0){ 
     for(int i=0; i<intentArray.size(); i++){ 
      alarmmanager.cancel(intentArray.get(i)); 
     } 
     intentArray.clear(); 
    } 
} 
+0

क्या आप मुझे कुछ कोड दे सकते हैं – Nitin

+0

I कुछ कोड के साथ मेरा जवाब अपडेट किया गया। ध्यान रखें, यह दस्तावेज़ीकरण के साथ नहीं जाता है। मुझे इस परियोजना से बहुत पहले नहीं करना पड़ा था जिस पर मैं काम कर रहा हूं। – ryandlf

+5

अलार्ममेनगर की सरणी क्यों? – KarolDepka

3

आप एकाधिक अलार्म सेट करना चाहते हैं (दोहरा या एकल), तो आप बस विभिन्न requestCode के साथ अपने PendingIntents बनाना होगा। अगर अनुरोध कोड समान है, तो नया अलार्म पुराने को ओवरराइट करेगा।

यहां एकाधिक एकल अलार्म बनाने और उन्हें ArrayList में रखने के लिए कोड है। मैं सरणी में लंबित इंंटेंट रखता हूं क्योंकि आपको अपने अलार्म को रद्द करने की आवश्यकता होती है। // संदर्भ चर अपने Context

AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE); 
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); 

for(i = 0; i < 10; ++i) 
{ 
Intent intent = new Intent(context, OnAlarmReceiver.class); 
// Loop counter `i` is used as a `requestCode` 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0); 
// Single alarms in 1, 2, ..., 10 minutes (in `i` minutes) 
mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      SystemClock.elapsedRealtime() + 60000 * i, 
      pendingIntent); 

intentArray.add(pendingIntent); 
} 
संबंधित मुद्दे