我有两项活动:
活动A - 项目清单
活动B - 项目的详细视图
通常,用户打开应用程序并启动活动A.用户看到项目列表,单击一个项目,然后启动活动B以显示项目详细信息。
也可以通过点击通知直接启动活动B.在这种情况下,没有后栈。
如何制作它以便在直接从通知启动活动B时,用户可以单击“返回”按钮并转到活动A?
答案 0 :(得分:22)
您可以在通知启动的Intent中添加Extra,以检测应用程序何时以这种方式启动。
然后,您可以覆盖onBackPressed()
Activity方法并处理该方案,例如
@Override
public void onBackPressed()
{
Bundle extras = getIntent().getExtras();
boolean launchedFromNotif = false;
if (extras.containsKey("EXTRA_LAUNCHED_BY_NOTIFICATION"))
{
launchedFromNotif = extras.getBoolean("EXTRA_LAUNCHED_BY_NOTIFICATION");
}
if (launchedFromNotif)
{
// Launched from notification, handle as special case
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
mActivity.startActivity(intent);
finish();
}
else
{
super.onBackPressed();
}
}
答案 1 :(得分:6)
答案 2 :(得分:5)
收到通知后,您应该注意这一点。
我遇到了类似的情况:
Intent intent = new Intent(context,ListDetail.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(ListDetail.class);
stackBuilder.addNextIntent(intent);
PendingIntent contentIntent =
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager mNotifM = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder mBuilder = new Notification.Builder(context);
mNotifM.notify(NotificationId.getID(), mBuilder.setStyle(new Notification.BigTextStyle(mBuilder)
.bigText(bigText)
.setBigContentTitle(title)
.setSummaryText(summaryText))
.setContentTitle(title)
.setSmallIcon(icon)
.setContentText(summaryText)
.setAutoCancel(true)
.setContentIntent(contentIntent)
.setTicker(bigText)
.build());
您需要在Manifest中设置活动的层次结构:
<activity
android:name=".ListDetail"
android:label="Detail"
android:parentActivityName=".List" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".List" />
</activity>
答案 3 :(得分:3)
我试过一个样本。请使用此链接
https://github.com/rajajawahar/NotificationBackStack
您要发布的活动..
Intent launchIntent = new Intent(context, SecondActivity.class).putExtra("Id", id);
父活动,如果按下
Intent parentIntent = new Intent(context, FirstActivity.class);
在任务构建器中添加两项活动
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
PendingIntent resultPendingIntent = stackBuilder.addNextIntentWithParentStack(parentIntent).addNextIntent(launchIntent).getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder notificationCompatBuilder =
new NotificationCompat.Builder(context);
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(id, notificationCompatBuilder.build());
NotificationManager mNotifyMgr =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationCompatBuilder.setAutoCancel(true).
setContentTitle("First Notification").
setContentText("Sample Text").
setSmallIcon(R.mipmap.ic_launcher).
setContentIntent(resultPendingIntent);
mNotifyMgr.notify(id, notificationCompatBuilder.build());
答案 4 :(得分:0)
使用onKeyDown()方法捕获后退按钮键事件,让用户转到活动A.不要忘记返回true以防止事件进一步传播。
http://developer.android.com/reference/android/app/Activity.html#onKeyDown(int,android.view.KeyEvent)