2016-06-29 11 views
1

我正在進行一些活動,其中包含一些EditText和正在進行的通知單擊正在進行的通知時返回上一個活動

填入EditText後,我按Home按鈕回到主屏幕(我的應用程序在後臺運行)。我只想要當我單擊正在進行的通知時,使用填充的EditTexts(不創建新的)返回我的活動。

我已經試過這

How should i do from notification back to activity without new intent

Notification click: activity already open

他們沒有在所有的工作!

下面是我的代碼片段

ProtocolMonitorActivity.java

Intent resultIntent = new Intent(this, ProtocolMonitorActivity.class); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(ProtocolMonitorActivity.class); 
    stackBuilder.addNextIntent(resultIntent); 

    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, 
      PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder notiBuilder = new NotificationCompat.Builder(
      this).setSmallIcon(R.drawable.noti_icon) 
      .setContentTitle("Protocol Monitor App") 
      .setContentText("Service is running") 
      .setOngoing(true); 
    notiBuilder.setContentIntent(resultPendingIntent); 

    notiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notiManager.notify(notiId, notiBuilder.build()); 

清單

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <activity 
     android:name=".ProtocolMonitorActivity" 
     android:label="@string/app_name" 
     android:process="com.android.phone" 
     android:launchMode="singleTop" 
     android:screenOrientation="portrait" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
      <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".ProtocolMonitorActivity" /> 

    </activity> 
</application> 

是否有人對此有什麼想法?

非常感謝你!

回答

2

使用TaskStackBuilder你不能做到這一點。 TaskStackBuilder的行爲是它總是清除任務(重新創建任何活動)。

你只需要一個「啓動意圖」帶給你的任務是在任何狀態它正好是在前臺有2種方法來做到這一點。

變式1:

final Intent notificationIntent = new Intent(this, ProtocolMonitorActivity.class); 
notificationIntent.setAction(Intent.ACTION_MAIN); 
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

變2:

final Intent notificationIntent = 
     PackageManager.getLaunchIntentForPackage(getPackageName()); 

然後做:

PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, 
     notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

NotificationCompat.Builder notiBuilder = new NotificationCompat.Builder(
     this).setSmallIcon(R.drawable.noti_icon) 
     .setContentTitle("Protocol Monitor App") 
     .setContentText("Service is running") 
     .setOngoing(true); 
notiBuilder.setContentIntent(resultPendingIntent); 

notiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
notiManager.notify(notiId, notiBuilder.build()); 
+1

它剛剛工作。感謝您的詳細解釋! –

+0

@ Viet-AnhDinh嗨,同樣的問題困擾着我。這種方式適用於關閉應用程序。但是當活動已經打開時,它將重新開始。如何解決它沒有SingleTask模式? – AnswerZhao

+0

@AnswerZhao不是真的。該解決方案只是將現有任務以任何狀態返回到前臺,不會再次啓動。如果您遇到特定問題,您應該發佈一個新問題,而不是對現有答案發表評論。這會讓你更加關注。 –

0

只需插入此行

resultIntent.setAction(Intent.ACTION_MAIN); 
+0

嗨。謝謝。我嘗試過,沒有運氣。 –

+0

看看這個; http://stackoverflow.com/a/21424959/5291413 – Berkay92

+0

謝謝!我需要先刪除TaskStackBuilder。 –