2012-07-27 8 views
20

में एक अलार्ममैनगर लंबित इन्टेंट को रद्द करें मैं अलार्ममेनगर को रद्द करना चाहता हूं जो एक सेवा को परिभाषित करता है, इस सेवा में एक नया अलार्ममैंजर शुरू हो सकता है या पहले परिभाषित अलार्म रद्द कर सकता है। और मुझे अलार्म में लंबित पैरामैन पता है मैनेजर.cancel (लंबित इंटेंन्ट), होना चाहिए filterEquals (अन्य इरादा) के साथ same.compare लेकिन यह अभी भी काम नहीं कर रहा है। रद्द हो गया। यहाँ मेरी कोडएक अन्य लंबित

public class GetRoundStroe { 
    private Store[] stores; 
    private Context mContext; 

    public GetRoundStroe(Context mContext) { 
     this.mContext = mContext; 
    } 

    public Store[] getStores() { 
     if (ComCommand.haveInternet(mContext)) { 
      start_am_normal(); 
     } else { 
      start_am_silence(); 
     } 
     return stores; 
    } 

    public Store[] start_am_silence() { 


     long firstTime = SystemClock.elapsedRealtime(); 

     AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 

     if (AlarmHolder.mAlarmNormal != null) { 
      am.cancel(AlarmHolder.mAlarmNormal); 

     } 

     am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       firstTime, TestSwitch.getInstance().getSilence_time(), AlarmHolder.mAlarmSilence); 


     return null; 


    } 

    public Store[] start_am_normal() { 


     long firstTime = SystemClock.elapsedRealtime(); 

     AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 

     if (AlarmHolder.mAlarmSilence != null) { 
      MyLog.e(GetRoundStroe.class,"AlarmHolder.mAlarmSilence"+AlarmHolder.mAlarmSilence+""); 
      am.cancel(AlarmHolder.mAlarmSilence); 
     } 
     am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       firstTime, TestSwitch.getInstance().getNormal_time(), AlarmHolder.mAlarmNormal); 

     return null; 
    } 

    private static final class AlarmHolder { 
     static final PendingIntent mAlarmSilence = PendingIntent.getService(ApplicationContext.getInstance(), 
       0, 
       new Intent(ApplicationContext.getInstance(), GetRoundSilenceService.class), 
       0); 

     static final PendingIntent mAlarmNormal = PendingIntent.getService(ApplicationContext.getInstance(), 
       0, new 
       Intent(ApplicationContext.getInstance(), GetRoundNormalService.class), 
       0); 

    } 
} 

GetRoundSilenceService और GerRoundNormalService आह्वान start_am_normal() या start_am_silence है; कोई मेरी मदद कर सकता है? धन्यवाद

उत्तर

50
myIntent = new Intent(SetActivity.this, AlarmActivity.class); 
    pendingIntent = PendingIntent.getActivity(CellManageAddShowActivity.this, 
     id, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    pendingIntent.cancel(); 
    alarmManager.cancel(pendingIntent); 

कोड की ये लाइनें निश्चित रूप से आप को दूर/लंबित इरादे और अलार्म को रद्द कर सकते हैं।

मुख्य बात यह है कि आप की आवश्यकता होगी है:

  1. एक ही आईडी और उचित आशय फ्लैग के पास लंबित आशय बनाएँ।
  2. लंबित इरादे को रद्द करें।
  3. अलार्म प्रबंधक का उपयोग कर अलार्म को रद्द करें।
+0

मैं तुम्हें –

+1

+1 greatoo मैन ... –

+2

सही जवाब है, दोनों pendingIntent.cancel() और alarmanager.cancel (pendingIntent) try.thank करेंगे "पूरी तरह से" pendingIntent – Soham

0

@MKJParekh उत्तर सही है, हालांकि मैं अधिक जानकारी जोड़ना चाहता हूं ताकि हम सभी जानते हों कि क्या काम करेगा और क्या नहीं होगा।

गतिविधि पर कहें आइए आप 30 सेकंड में गतिविधि सी खोलने के लिए अलार्ममेनगर को बनाते हैं और सेट करते हैं, फिर किसी अन्य गतिविधि पर जो हम हो सकते हैं, हम उस अलार्ममेनर को रद्द करना चाहते हैं। इस प्रकार, हम निम्नलिखित करेंगे;

activityA में हम बना सकते हैं और सेट AlarmManager;

//activityA 
Intent myIntentA = new Intent(actvityA.this, activityB.class) 
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
PendingIntent myPendingIntent = PendingIntent.getActivity(activityA.this, 0, myIntentA, PendingIntent.FLAG_ONE_SHOT); 

//Calendar with the time we want to fire the Alarm 
Calendar calendar = Calendar.getInstance(); // Get Current Time 
calendar.add(Calendar.SECOND,30);  //Fire Alarm in 30 seconds from Now.     

((AlarmManager)getSystemService(ALARM_SERVICE)).setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), myPendingIntent); 
एक और गतिविधि में

कुछ समय बाद हम activityA जो हम करने के लिए कोई उपयोग कर सकते है में बनाया इस तरह के AlarmManager रद्द करना चाहते हैं। आइए इस वर्तमान गतिविधि गतिविधि को कॉल करें;

//activityZ 
Intent myIntentZ = new Intent(activityZ.this, activityB.class); 
PendingIntent pendingIntentZ = PendingIntent.getActivity(activityZ.this, 0, myIntentZ, PendingIntent.FLAG_ONE_SHOT); 

((AlarmManager)getSystemService(ALARM_SERVICE)).cancel(pendingIntentZ); 

कुछ महत्वपूर्ण बिंदुओं,

संदर्भ हम new Intent(context) में activityA में उपलब्ध कराने और getActivity(context) ही कर रहे हैं, लेकिन वे जहाँ हम AlarmManager रद्द कर रहे हैं इस मामले में, से गतिविधि से मिलान करने की जरूरत नहीं है activityZ एक और संदर्भ है।

वर्ग हम AlarmManager साथ खोलना चाहते हैं दोनों गतिविधियों new Intent (context, activityB.class) में एक ही हो सकता है, requestCode जो एक पूर्णांक ही होना चाहिए है, मैं इस उदाहरण के लिए 0 इस्तेमाल किया। अंत में ध्वज PendingIntent.FLAG_ONE_SHOT दोनों गतिविधियों में समान होना चाहिए।

myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); का उपयोग किया गया था क्योंकि PendingIntent.getActivity की आवश्यकता है यदि हम किसी मौजूदा गतिविधि के संदर्भ के बाहर एक गतिविधि शुरू कर रहे हैं।