2011-12-12 31 views
45

का उपयोग कर रहा एक अलार्म application.I सफलतापूर्वक बुनियादी अलार्म कार्यों को लागू किया है निर्माण कर रहा हूँ कई अलार्म सेट करने के।कैसे एंड्रॉयड अलार्म प्रबंधक

Calendar calendar = Calendar.getInstance(); 
calendar.set(calendar.HOUR_OF_DAY, sHour); 
calendar.set(calendar.MINUTE, sMin); 
calendar.set(calendar.SECOND, 0); 
calendar.set(calendar.MILLISECOND, 0); 
long sdl = calendar.getTimeInMillis(); 

Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); 
PendingIntent sender = PendingIntent.getBroadcast(AlarmList.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager ALARM1 = (AlarmManager)getSystemService(ALARM_SERVICE); 
ALARM1.set(AlarmManager.RTC_WAKEUP, sdl, sender); 
अपने आवेदन में

, उपयोगकर्ता अलार्म साप्ताहिक दोहराने के लिए दिन का चयन कर सकते (रविवार, सोमवार ...)। मैं साप्ताहिक दोहराने के लिए कई अलार्म बनाने की कोशिश कर रहा हूं लेकिन यह नहीं जानता कि इसे कैसे किया जाए। क्या मैं इसे अंतराल (दोहराने) का उपयोग करके बना सकता हूं या क्या मुझे एकाधिक अलार्म प्रबंधक बनाना चाहिए?

+0

सीधे शब्दों में आईडी फ़ील्ड का उपयोग करें ... alarmmanager पर सेट के दस्तावेज़ देखने। – Warpzit

+0

इस पोस्ट पर मेरा जवाब देखें http://stackoverflow.com/questions/12785702/android-set-multiple-alarms/31805171#31805171 – Junaid

उत्तर

126

आप pending intents के लिए different Broadcast id's उपयोग करने के लिए की जरूरत है। कुछ इस तरह:

Intent intent = new Intent(load.this, AlarmReceiver.class); 
    final int _id = (int) System.currentTimeMillis(); 
    PendingIntent appIntent = PendingIntent.getBroadcast(this, _id, intent,PendingIntent.FLAG_ONE_SHOT); 

प्रणाली का उपयोग करते हुए समय हर लंबित आशय तुम आग के लिए अद्वितीय पहचानकर्ता होना चाहिए।

+1

कोशिश करूँगा, धन्यवाद, मैं यही था की तलाश में है और क्या खोज करने के लिए नहीं मिला सकता है और खोज करने के लिए कैसे, अंत में यह मेरी समस्या हल हो गई, धन्यवाद एक बहुत दोस्त :) –

+2

कैसे हम अंततः उन सभी को रद्द कर सकते हैं? हमें _id के संदर्भ रखने की जरूरत है? –

+1

@ user2427819 हाँ, के लिए हम है कि क्या मैं –

10
the docs से

:

यदि पहले से ही इस आशय अनुसूचित (दो उद्देश्यों की समानता के साथ के लिए एक अलार्म filterEquals(Intent) द्वारा परिभाषित किया जा रहा है, तो इसे हटा दिया और प्रतिस्थापित किया जाएगा यह एक

कर रहा है

एकाधिक AlarmManagers आपकी समस्या का समाधान नहीं करेगा। अगर उनके पास कई अलग-अलग अलार्म (अलग-अलग समय और अलग-अलग दिन) हैं, तो आपको हर बार BroadcastReceiver के भीतर अलार्म सेट करने की आवश्यकता होगी पिछले अलार्म से दूर।

आपको RECEIVE_BOOT_COMPLETED को पकड़ने की आवश्यकता होगी और बूट प्राप्त करने के लिए BroadcastReceiver रखना होगा ताकि अगर फोन रीबूट किया गया हो तो आप अपने अलार्म को फिर से शेड्यूल कर सकते हैं।

+1

आपकी मदद के लिए धन्यवाद। मैं – Hassy31

7

एकाधिक अलार्म आप इतना है कि यह दूसरों से अलग पहचाना गया अपने Intent हर बार परिभाषित करने की आवश्यकता सेट करने के लिए।

// give your alarm an id and save it somewhere 
// in case you want to cancel it in future 
String myAlarmId = ...; 

// create your Intent 
Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); 
intent.setData(Uri.parse("myalarms://" + myAlarmId)); 
... 

अपने कोड @ Hassy31 के बाकी ठीक है के रूप में है और अपरिवर्तित रहता है: सबसे आसान तरीका है मैं यह करने के अपने Intent कुछ की data क्षेत्र स्थापित करने के लिए इस प्रकार है।

ध्यान दें कि PendingIntent.getBroadcast() विधि (के रूप में @parag ने सुझाव दिया) में requestCode पैरामीटर प्रलेखन के अनुसार अप्रयुक्त है तो यह इसके बारे में जाने के लिए सही तरीका नहीं है।

+1

हाय, यह कहां कहता है कि यह अप्रयुक्त है? – blacharnia

+0

यह संभव है कि लेखन के समय यह सच था और अब और सत्य नहीं हो सकता है। –

2

सेट प्रसारण pendingIntent

के लिए id
for (int id = 0; id < 3; id++) { 
     // Define pendingintent 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id,ntent, 0); 
     // set() schedules an alarm 
     alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, pendingIntent); 
} 
संबंधित मुद्दे