2011-09-19 16 views
14

का उपयोग कैसे करें I पता लगाने की कोशिश कर रहा हूं कि मेरी सूचना कब साफ़ हो जाती है। मेरा प्रश्न सीधे इस answer को संदर्भित करता है जो मुझे लगता है कि मुझे क्या करना है।Notification.deleteIntent

// usual Notification initialization here 
notification.deleteIntent = PendingIntent.getService(context, 0, new Intent(context, CleanUpIntent.class), 0); 
notificationManager.notify(123, notification) 

यह CleanUpIntent वर्ग है:: यह कैसे मैं कार्यों को लागू करने कर रहा हूँ है,

class CleanUpIntent extends IntentService { 
    public CleanUpIntent() { 
     super("CleanUpIntent"); 
    } 

    @Override 
    protected void onHandleIntent(Intent arg0) { 
     // clean up code 
    } 
} 

बाद में मैं बस की तरह मैं सामान्य रूप से लेकिन होगा अधिसूचना लांच जब मैं इसे बाहर का परीक्षण करने के (जाना "सभी अधिसूचनाएं साफ़ करें" दबाकर) कुछ भी नहीं होता है। मैंने कोड की एक पंक्ति डाली जो कि IntentService प्रारंभ होने पर LogCat पर कुछ प्रिंट आउट करता है, लेकिन कुछ भी नहीं चला। क्या यह मुझे Notification.deleteIntent का उपयोग करने का अनुमान है?

उत्तर

3

आपको क्या करने की जरूरत है रजिस्टर एक BroadcastReceiver (शायद अपने AndroidManifest.xml में या वैकल्पिक रूप से एक Service में registerReceiver का प्रयोग करके) और फिर deleteIntent सेट एक Intent कि कि रिसीवर द्वारा पकड़ा हो जाएगा हो रहा है।

+0

क्या आपको पता है कि सूचनाएं साफ़ होने पर IntentFilter ध्वज पकड़ने के लिए क्या होता है? – Brian

+0

यह 'इंटेंटफिल्टर' ध्वज नहीं है, यह एक 'ब्रॉडकास्ट रिसीवर' है: http://code.google.com/p/islamictools/source/browse/trunk/IslamicTools/src/com/alpha/commun/MsgNotification देखें .java? spec = svn11 और r = 11 उदाहरण के लिए आप यह कैसे करेंगे। – Femi

+0

मैं ब्रॉडकास्ट रिसीवर से बहुत परिचित नहीं हूं, लेकिन मेरा सवाल यह था कि मैं रिसीवर कैसे पंजीकृत करता हूं। क्या आपको इसे एक IntentFilter प्रदान करने की आवश्यकता नहीं है या नहीं, आप Context.registerReceiver को कॉल करते हैं या इसे मैन्युअल रूप से AndroidManifest में डालते हैं? – Brian

0

आपको getService के बजाय getBroadcast मेथोड का उपयोग करना चाहिए और विशिष्ट कार्रवाई के लिए रिसीवर पंजीकृत करना चाहिए।

38

नमूना कोड जिसे उपयोगकर्ता जब अधिसूचना को साफ़ करता है, आशा करता है कि यह आपकी मदद करेगा।

.... 
notificationBuilder.setDeleteIntent(getDeleteIntent()); 
.... 


protected PendingIntent getDeleteIntent() 
{ 
    Intent intent = new Intent(mContext, NotificationBroadcastReceiver.class); 
    intent.setAction("notification_cancelled"); 
    return PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
} 

NotificationBroadcastReceiver.java

@Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction(); 
     if(action.equals("notification_cancelled")) 
     { 
      // your code 
     } 
    } 

AndroidManifiest.xml

<receiver android:name=".NotificationBroadcastReceiver"> 
       <intent-filter> 
        <action android:name="notification_cancelled"/> 
       </intent-filter> 
      </receiver> 
+4

'action' equallity –

+7

की जांच करने की बिल्कुल आवश्यकता नहीं है एक एप्लिकेशन में एक ही रिसीवर या अधिसूचना सामग्री या कुछ अन्य स्थितियों के आधार पर वांछित अलग-अलग कार्रवाइयों के साथ उत्पन्न विभिन्न अधिसूचनाएं हो सकती हैं। उन मामलों में, कोई एक क्रिया को परिभाषित करना चाहता है। – MeanderingCode

+1

ध्यान रखें कि इस कोड ने सभी सूचनाओं के लिए लंबित इंटेन्टेंट का पुन: उपयोग किया है। Intent.isEqual() द्वारा चेक किए गए विभिन्न अनुरोध कोड या विभिन्न डेटा का उपयोग कर unqiue लोगों को उत्पन्न करने के बारे में अपना विवरण पढ़ें। – althaus

-4

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