android - इस दोहराने वाले अलार्म को कैसे रद्द करें?




alarm (2)

मैं उपयोगकर्ताओं के लिए एक अनुस्मारक की तरह कुछ लिख रहा हूँ। उपयोगकर्ता अपनी घटनाओं के लिए अनुस्मारक सेट करेंगे, जब समय आता है, एक दोहराव अलार्म स्टेटस बार अधिसूचना को ट्रिगर करने के लिए सेट किया जाएगा। लेकिन अधिसूचना का चयन करने या अधिसूचना को मंजूरी मिलने के बाद अलार्म नॉन-स्टॉप लगता है। मुझे यकीन नहीं है कि इस दोहराने वाले अलार्म को कहां रद्द करना है। नीचे कुछ कोड हैं: मेरी मुख्य गतिविधि में दोहराना अलार्म सेट करें

alarmTime = Calendar.getInstance();
Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

alarmTime.add(Calendar.MINUTE,offset_time);

//Schedule the alarm
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), 30 * 1000, sender);

मेरी ऑनसेसिव विधि में, मैं बस स्टेटस बार में अधिसूचना प्रदर्शित करता हूं और ध्वज को FLAG_AUTO_CANCEL रूप में सेट करता FLAG_AUTO_CANCEL

manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);

// Set the icon, scrolling text and timestamp
Notification notification = new Notification(R.drawable.medical, text, System.currentTimeMillis());

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, i, 0);

notification.flags = Notification.FLAG_AUTO_CANCEL;

manager.notify(R.string.service_text, notification);

जब उपयोगकर्ता अधिसूचना का चयन करता है या इसे साफ़ करता है तो मैं अलार्म को कैसे रोक सकता हूं?


अपनी MainActivity , अलार्म समय सेट करें। यदि आप एकाधिक अलार्म का उपयोग करने जा रहे हैं, तो अपने संबंधित आईडी स्टोर करने के लिए SharedPreferences गए SharedPreferences का उपयोग करें। यहां कोड है:

PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, _id,intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
            pendingIntent);

public static Context getContext() {
    return mContext;
}
mContext=mainactivity.this;

आपकी दूसरी Activity SharedPreferences गए SharedPreferences से एक ही आईडी का उपयोग करें। मेरे कोड में, मुझे Alarm_id , Alarm_id से आईडी Alarm_id । अंत में, आप MainActivity.getContext() साथ MainActivity.getContext() एक्टिविटी संदर्भ का उपयोग कर सकते हैं। यहां कोड है:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intentAlarm = new Intent(AlarmListviewActivity.this,
        MainActivity.class);
PendingIntent morningIntent = PendingIntent.getBroadcast(MainActivity.getContext(), Alarm_id.get(positon),
        intentAlarm, PendingIntent.FLAG_CANCEL_CURRENT);

alarmManager.cancel(morningIntent);
morningIntent.cancel();

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

static void CancelRepeatingAlarm(Context context, boolean creating){
    //if it already exists, then replace it with this one
    Intent alertIntent = new Intent(context, AlertReceiver.class);
    PendingIntent timerAlarmIntent = PendingIntent
            .getBroadcast(context, 100, alertIntent,PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    if (creating){
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), INTERVAL, timerAlarmIntent);
    }else{
        alarmManager.cancel(timerAlarmIntent);
    }






alarm