我想要做的是在Android中創建一個通知,當它被點擊時將會打開一個活動。這個活動被稱爲「NotificationsActivity」,其父代是「MainActivity」。無論何時向用戶展示NotificationsActivity,我都希望他們能夠按下後退按鈕以訪問MainActivity。我一直在使用這裏的說明(http://developer.android.com/guide/topics/ui/notifiers/notifications.html#DirectEntry)試圖讓這個工作。但是,無論我嘗試什麼,每當我從NotificationsActivity中按回時,該應用程序都會完全退出。我能想到的唯一問題是我的應用程序有一個登錄屏幕,我也將其識別爲MAIN和LAUNCHER。我不認爲這會造成問題,但這是我能想到的。TaskStackBuilder沒有按預期工作
總結。我要的是:
- 點擊通知
- 打開NotificationsActivity
- 按返回
- 打開MainActivity
但是我得到的是:
- 點擊通知
- 打開NotificationsActivity
- 按返回
- 退出應用
相關代碼顯示如下。
從AndroidManifest.xml中:
<activity
android:name=".LoginActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity
android:name=".NotificationsActivity"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
這是我的Java代碼:
private void notifyRecordChanges(){
String notificationText = "test notification";
Context context = this;
NotificationCompat.Builder builder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_notify)
.setAutoCancel(true)
.setContentText(notificationText);
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(context, NotificationsActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(NotificationsActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(resultPendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, builder.build());
}
編輯:我從項目中刪除的LoginActivity類,它並沒有區別。所以,現在我不知道我做錯了什麼。
SECOND EDIT: 要添加到Skizo的答案,我必須支持操作欄上的後退按鈕。這是處理該問題的代碼。我從Skizo提供的方法覆蓋和下面的代碼中調用「goBack」。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
goBack();
break;
}
return super.onOptionsItemSelected(item);
}
private void goBack(){
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
}
是否有logcat的任何錯誤? –
完全沒有錯誤。通常如果應用程序崩潰,我甚至不會在最近的列表中看到它。但是,在這種情況下,它仍然在最近出現。 – nybblesAndBits