2010-03-05 17 views
31

से एक गतिविधि शुरू करने मैं अपने अनुप्रयोग के लिए स्थिति पट्टी में एक सूचना मिली है:एक अधिसूचना

Notification notification = new Notification(R.drawable.icon, null, System.currentTimeMillis()); 

    Intent notificationIntent = new Intent(this.parent, MainActivity.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(this.parent, 0, notificationIntent, 0); 

    ... 

    notification.flags = Notification.FLAG_ONGOING_EVENT;   
    mNotificationManager.notify(NOTIFICATION_ID, notification); 

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

+0

जाँच करें: http://stackoverflow.com/questions/3305088/how-to-make-notification-intent-resume-rather-than-making-a- नया इरादा/3 9 482464 # 39482464 – TharakaNirmana

उत्तर

30

मैंने एंड्रॉइडManifest.xml फ़ाइल में singleTask पर अपनी गतिविधि के launchMode को बदलकर इस समस्या को हल किया है।

इस संपत्ति के लिए डिफ़ॉल्ट मान standard है, जो किसी भी संख्या को चलाने के लिए अनुमति देता है।

"सिंगल टास्क" और "सिंगल इंस्टेंस" गतिविधियां केवल एक कार्य शुरू कर सकती हैं। वे हमेशा गतिविधि ढेर की जड़ पर रहते हैं। इसके अलावा, डिवाइस एक समय में गतिविधि का केवल एक उदाहरण रख सकता है - केवल एक ऐसा कार्य। [...]

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

आप Android Developers' Guide

मुझे आशा है कि इस मदद करता है

+1

धन्यवाद, यह भयानक –

+1

भी '' 'एंड्रॉइड पर एक नज़र डालें: launchMode =" सिंगलटॉप "' '', यह भी फिट हो सकता है और "सामान्य लॉन्च" के तहत सूचीबद्ध है। –

+0

किसी भी (सिंगल टास्क, सिंगलटॉप, सिंगल इंस्टेंस) का उपयोग करें, मैंने पाया कि गतिविधि कार्य स्टैक टूटा गया था, कार्य स्टैक ने अन्य सभी गतिविधियों को मंजूरी दे दी – Ninja

-1

मैं का उपयोग करें:

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
notificationIntent.setAction(Intent.ACTION_MAIN); 

सुनिश्चित नहीं हैं कि ये मान आपको निर्धारित करने की आवश्यकता है, लेकिन इस सवाल का जवाब उन तरीकों/झंडे में है।

+0

मैंने उपर्युक्त कोशिश की लेकिन यह काम नहीं करता है, क्या आप एक पूर्ण अधिसूचना उदाहरण दे सकते हैं जो काम करता है? –

+0

@EnesBattal क्षमा करें, अब मेरे पास यह कोड उपलब्ध नहीं है (मेरे ऐप के साथ एक अलग तरीका चला गया।) इरादा झंडे की बात एक बड़ी गड़बड़ है। मुझे नहीं लगता कि मैंने कभी इसे वास्तव में समझ लिया है। – gnobal

-1

आप अपनी गतिविधि लांचर करता है बस के रूप में शुरू करने की आवश्यकता में एक विस्तृत विवरण मिल सकता है। देखें: Resume application and stack from notification

1

मैं सिर्फ एक समाधान इस समस्या को मिल गया है: मैं बनाया getPreviousIntent विधि और यह सब कि `PendingIntent को दे दिया:

private Intent getPreviousIntent(Intent newIntent) { 
    final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    final List<ActivityManager.RecentTaskInfo> recentTaskInfos = am.getRecentTasks(1024,0); 
    String myPkgNm = getPackageName(); 

    if (!recentTaskInfos.isEmpty()) { 
     ActivityManager.RecentTaskInfo recentTaskInfo; 
     for (int i = 0; i < recentTaskInfos.size(); i++) { 
      recentTaskInfo = recentTaskInfos.get(i); 
      if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(myPkgNm)) { 
       newIntent = recentTaskInfo.baseIntent; 
       newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      } 
     } 
    } 
    return newIntent; 
} 
+0

हम इसे लंबित उद्देश्य के लिए कैसे दे सकते हैं? क्या आप कृपया कोड – yrahman

+0

साझा कर सकते हैं ti हल हो गया है http://stackoverflow.com/questions/31448840/android-how-to-open-last-activity-when-tapping-notification – nAkhmedov

1

मैं एक ऐसी ही समस्या है और उचित तरीके से हो रही थी इसलिए

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

प्रलेखन से इस वसीयत की तरह Intent.FLAG_ACTIVITY_CLEAR_TOP और Intent.FLAG_ACTIVITY_SINGLE_TOP: इस संभाल करने के लिए झंडे का उपयोग है

FLAG_ACTIVITY_CLEAR_TOP

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

FLAG_ACTIVITY_SINGLE_TOP

यदि इसे सेट गतिविधि यदि वह पहले से इतिहास ढेर के शीर्ष पर चल रहा है का शुभारंभ नहीं किया जाएगा।

1

इस ऐप को अपनी ऐप की मेनिफेस्ट फ़ाइल में इसी गतिविधि में जोड़ें।

android:launchMode="singleTask" 

जैसे:

<activity 
    android:name=".Main_Activity" 
    android:label="@string/title_main_activity" 
    android:theme="@style/AppTheme.NoActionBar" 
    android:launchMode="singleTask" /> 
संबंधित मुद्दे