2010-07-31 14 views
16

मेरे आवेदन में मैं सूचनाओं के साथ उपयोगकर्ता को सूचित करता हूं, अगर कुछ विशेष होता है:एंड्रॉइड: क्रिएट() पर अधिसूचना कॉल पर क्लिक करने से कैसे बचें

public void triggerNotification(String msg) { 
     notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     Intent contentIntent = new Intent(this, ABC.class); 
     Notification notification = new Notification(R.drawable.icon, msg, System.currentTimeMillis()); 
     notification.setLatestEventInfo(this, "ABC", msg, PendingIntent.getActivity(this.getBaseContext(), 0, contentIntent, PendingIntent.FLAG_CANCEL_CURRENT)); 
     notification.flags = Notification.FLAG_AUTO_CANCEL; 
     notificationManager.notify(notificationCounter, notification); 
     notificationCounter++; 
} 

यदि उपयोगकर्ता अधिसूचना पर क्लिक करता है, तो ऑनक्रेट() विधि कहा जाता है। लेकिन मैं चाहता हूं कि मेरे ऐप में एक विशिष्ट विधि कहा जाता है, या यदि ऐप अग्रभूमि में नहीं है, तो इसे वापस अग्रभूमि में लाया जाता है।

मुझे पता है कि बहुत सारे ट्यूटोरियल हैं जो अधिसूचनाओं को संभालने के तरीके को समझाते हैं, लेकिन मैं उन्हें पूरी तरह से समझ नहीं पा रहा हूं और मैं कभी भी उन चीजों को लागू करने में सक्षम नहीं था जैसा मैं चाहता हूं।

उत्तर

15

अग्रभूमि के लिए अपने app लाने आप अपने इरादे पर अलग अलग झंडे निर्धारित करने की आवश्यकता करने के लिए:

contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

एक विशिष्ट विधि चल के लिए आप सिर्फ इरादे के साथ-साथ अतिरिक्त जानकारी दे सकते हैं और व्याख्या यह निर्धारित करने के लिए कि कौन सी विधि चलाना है, यह आपके आवेदन में है।

+0

धन्यवाद ले जाता है। यह काम करता है। – RoflcoptrException

+0

हां मैंने अपने इरादे में कुछ अतिरिक्त लगाया। लेकिन मैं इस अतिरिक्त जानकारी को कहां निकाल सकता हूं? आपके संस्करण के बाद, क्रिएट() को नहीं कहा जाता है। – RoflcoptrException

+3

जवाब ठीक है मैंने पाया: गतिविधि # onNewIntent (आशय आशय) कहा जाता है। – RoflcoptrException

5

सिफारिश FLAG_ACTIVITY_CLEAR_TOP और FLAG_ACTIVITY_SINGLE_TOP उपयोग करने के लिए केवल आंशिक रूप से समस्या का हल। एंड्रॉइड मेनिफेस्ट में गतिविधि में इन सेटिंग्स को भी लागू किया जाना चाहिए ताकि होम स्क्रीन से गतिविधि को लॉन्च करना एक ही व्यवहार हो। इन गुणों के बिना गतिविधि के कई उदाहरण लॉन्च किए जा सकते हैं।

<activity android:name="foo" 
      android:clearTaskOnLaunch="true" 
      android:launchMode="singleTop" 
      android:label="@string/app_name"> 
+0

इन लाइनों को जोड़ने के बिना काम नहीं करता ... –

0

मुझे पता चला है कि अगर आप Intent contentIntent = new Intent(this, ABC.class); का उपयोग इस निशानी नहीं लगाई की परवाह किए बिना onCreate(); कहता है।

उपयोग Intent contentIntent = getIntent();onCreate(); को छोड़ और उस के लिए onStart();

संबंधित मुद्दे