我想要做的是在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