2016-03-30 14 views
2

Uygulamamda, kullanıcı bir uygulama Bildirimi tıklandığında başlatılan bir Activity var. Kullanıcı Bildirimi tıkladığındaBir Bildirim'den bir Etkinlik başlattığımda, MainActivity de başlatıldı

Bazen, Activity doğru görüntülenir, ancak bazen uygulaması için MainActivity da geri doğru Activity başladı ve kullanıcı geri doğru Activity yılında tıkladığında görüntülenir. Ben AlertActionReceiverActivity için "android:launchMode=singleTask" ekleyerek çalıştı gelmiş

, o Bildirim başlatılan ve aynı zamanda hiçbir eklemeden olduğu Activit y, ancak sonuç aynıdır.

Bu sorunu çözmek için herhangi bir şans? Eğer geri döndüğünüzde Android'de varsayılan olarak, bu görüntülenen ana faaliyettir çünkü

Intent resultIntent = new Intent(this, ResultActivity.class); 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(ResultActivity.class); 
    PendingIntent resultPendingIntent = 
     stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
    stackBuilder.addNextIntent(resultIntent); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 

    Intent notifyIntent = 
     new Intent(new ComponentName(this, ResultActivity.class)); 
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent notifyPIntent = 
     PendingIntent.getActivity(
     this, 
     0, 
     notifyPIntent, 
     PendingIntent.FLAG_UPDATE_CURRENT 
    ); 
    builder.setContentIntent(notifyPIntent); 
    NotificationManager mNotificationManager = 
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(id, builder.build()); 
+0

bakın yardımcı umut

(sadece API uyumluluğu !! dikkatli olun) bu [post] için (http://stackoverflow.com/questions/10184351/how-to-start-activity-when-user-clicks-a-notification) ve size yardımcı olabileceğine bakın – Vucko

+0

Bildirim kodunuzu burada paylaşın. –

cevap

1

Öyle, değil önceki bir:

<activity android:name=".MainActivity" android:label="@string/app_name" android:exported="true" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

<activity android:name=".AlertActionReceiverActivity" android:launchMode="singleTask" android:excludeFromRecents="true" android:theme="@style/AppThemeTransparent" /> 
+0

Bildirim bayrakları için NotificationActivity ve Intent.FLAG_ACTIVITY_CLEAR_TASK için taskAffinity = "" değiştiricisini ekledikten sonra iyi çalışıyor gibi görünüyor. Teşekkürler! –

0
<activity android:name=".MainActivity" android:label="@string/app_name" android:exported="true" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".AlertActionReceiverActivity" 
     android:parentActivityName=".ABCActivity" 
     android:launchMode="singleTask" android:excludeFromRecents="true" android:theme="@style/AppThemeTransparent"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".ABCActivity"/> 
    </activity> 

Ayrıca uygun TaskStack oluşturmak .

çözüm Android doküman üzerinde açıklanmıştır: özel bayraklarla bir pendingIntent kullanmaktır: http://developer.android.com/guide/topics/ui/notifiers/notifications.html#NotificationResponse

Bu

+0

Örnek için teşekkürler, ancak onu takip edip edemeyeceğimi bilmiyorum ... Aynı Değişken adını bir Intent ve bir PendingIntent için kullanıyorsunuz ve neden TaskStackBuilder öğesini tanımladığınızı anladığımdan emin değilsiniz. Tanımladıktan sonra, Bildirime hiç atamadınız. Yine de teşekkürler! –

+0

@TheMatrix Peki herhangi bir kod vermediniz, bu yüzden sadece kendi başıma göre değişken aldım. Ama yine de bu yararlıysa, bunu yapabilirsiniz. –

İlgili konular