2011-07-08 14 views
5

मैं नीचे दिए गए कोड के साथ अलार्म बनाने और रद्द करने में सक्षम हूं। मैं एक से अधिक अलार्म बनाना चाहता हूं। अलार्म समय एक सरणी सूची से आता है। इस सरणी सूची में मैं प्रत्येक तारीख के लिए अलार्म बनाना चाहता हूं। और रद्द बटन के प्रेस केवल वर्तमान अलार्म को रद्द कर देंगे। मैं यह कैसे कर सकता हूं?एक से अधिक अलार्म कैसे बना सकते हैं?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    setOneTimeAlarm(); 

    buttonCancel.setOnClickListener(new Button.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
      alarmManager.cancel(pendingIntent); 

      // Tell the user about what we did. 
      Toast.makeText(MainActivity.this, "Cancel!", Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

private void setOneTimeAlarm() { 
    Intent intent = new Intent(this, AReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
} 

उत्तर

3

मैं एक उदाहरण पोस्ट करूंगा जिस तरह से मैंने इसे बनाए गए ऐप्स में से एक में किया था।

अलार्म को कॉल करते समय आपको एक अतिरिक्त आईडी भेजने की आवश्यकता है: टीएमपी एक ऐसी वस्तु है जिसमें एक अद्वितीय आईडी है।

Intent intent = new Intent(DisplayActivity.this,AlarmReciever.class); 

intent.setData(Uri.parse("timer:"+tmp.getId())); 

PendingIntent pendingIntent = PendingIntent.getBroadcast(DisplayActivity.this,1, intent, 0); 
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent); 

और उसके बाद आप इस लाइन के साथ आईडी पुनः प्राप्त:

Long.parseLong(intent.getData().getSchemeSpecificPart()) 

जब सिर्फ आईडी के साथ एक ही लंबित मंशा बना सकते हैं और alarmmanager.cancel()

संपादित करें फोन रद्द:

उस आइटम पर विशिष्ट अलार्म को रद्द करने के लिए जिस पर उपयोगकर्ता ने क्लिक किया था (यहां वह जगह है जहां tmp.getId काम में आता है) मैंने अभी इस कोड का उपयोग किया है, मुझे लगता है कि आपको एक ही लंबित इंटेन्टेंट बनाने की आवश्यकता है विशिष्ट अलार्म को रद्द करने के लिए le।

Intent intent = new Intent(DisplayActivity.this,AlarmReciever.class); 
intent.setData(Uri.parse("timer:"+tmp.getId())); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(DisplayActivity.this,1, intent, 0); 
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
am.cancel(pendingIntent); 

अलार्म रेसीवर मेरा ब्रॉडकास्ट रिसीवर है। DisplayActivity गतिविधि ही है।

Long.parseLong(intent.getData().getSchemeSpecificPart()) 
+0

जवाब दाऊद के लिए धन्यवाद, लेकिन मुझे समझ नहीं आता मैं AlarmManager में तिथियों की सूची कैसे सेट हो जाएगा। – realuser

+0

आप एक सूची क्यों चाहते हैं? यह कई अलग-अलग अलार्म बनाता है, बस कैलेंडर ऑब्जेक्ट में अलग-अलग मान डालता है। मैं स्थानीय डेटाबेस में सभी अलार्म का संदर्भ रखने के लिए उन्हें दिखाने और उन्हें रद्द करने में सक्षम रहता हूं। कई पर अलार्ममैनगर.सेट के माध्यम से लूप करें और आप वास्तव में क्या मतलब है? –

+0

मुझे लगता है कि मुझे एक ही समस्या है। मेरे पास सेवा है जहां से मैंने अलार्म सेट किया है। अगर मैं एक से अधिक अलार्म सेट करता हूं, तो केवल अंतिम काम करता है। तो मुझे यह नहीं मिला: अगर मैं एक से अधिक अलार्म सेट करना चाहता हूं, तो मुझे आईडी का उपयोग करना चाहिए, या आईडी केवल उद्देश्य को रद्द करने के लिए हैं? – Mario

1

यह कैसे अद्वितीय ID प्राप्त करने पर डेविड का जबाब की निरंतरता पर है:

यह AlarmReciever में है मैं निम्नलिखित कोड है।

अद्वितीय आईडी SQLITE तालिका से आ सकती है। अनुस्मारक दिनांक और समय को स्टोर करने के लिए तालिका बनाते समय, ऑटोमेशन के साथ एक _ID कॉलम है। जब पंक्तियां डाली जाती हैं, तो यह कॉलम स्वचालित रूप से एक-अप संख्या और अद्वितीय हो जाएगा। यदि डिवाइस बंद हो जाता है और आप अनुस्मारक को दोबारा बनाना चाहते हैं तो तालिका आपको आपके लिए अनुस्मारक स्टोर करने में भी मदद करेगी। डिवाइस शटडाउन पर, मुझे लगता है कि अलार्म खो जाएंगे।

CREATE TABLE IF NOT EXISTS reminder_datetime 
_ID INTEGER PRIMARY KEY AUTOINCREMENT, 
NOTIF_DATETIME INTEGER; 

की स्थापना और, उपयोग कैलेंडर वस्तु मेज से दिनांकों हो रही के साथ काम करने के लिए:

Calendar cal = Calendar.getInstance(); 

तो आप उपयोग कर सकते, cal.setTime या cal.setTimeInMillis कार्य करता है। इसी प्रकार, तिथि प्राप्त करने के लिए कार्य प्राप्त करें।

उपयोग दिनांक स्वरूप यदि दिनांक फ़ॉर्मेट करने के लिए एक पठनीय हैं:

myDate = android.text.format.DateFormat.format("MM/dd/yyyy", cal.getTimeInMillis()).toString(); 
संबंधित मुद्दे