下面的函数显示一个待处理意图的通知。当屏幕解锁并收到通知时,下面的方法将创建一个通知。
当用户点击通知时,它会打开第一个 ChildActivity,在 backpress 时,它会关闭子 Activity 并打开 MainActivity->subActivity。在 backpress 上关闭 subActivity 并显示 MainActivity。
子活动将根据 MainActivity 的 Intent 动作启动
在解锁屏幕中,以下方法给出了上述结果,并且根据我的要求完美。
public void showNotification(Context context, String extraUri){
final Intent mainActivityIntent = new Intent(context, MainActivity.class);
mainActivityIntent.putExtra(MainActivity.INTENT_EXTRA_ACTIVE, 1232123);
// this will help determine to start subactivity from mainActivity
mainActivityIntent.setAction(MainActivity.MAIN_ACTIVITY_CHANGED);
mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
final TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(context);
taskStackBuilder.addNextIntent(mainActivityIntent);
final Intent intent = new Intent(context, ChildActivity.class);
intent.putExtra(ChildActivity.EXTRA_URI, extraUri);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
taskStackBuilder.addNextIntent(intent);
final PendingIntent pendingIntent = taskStackBuilder.getPendingIntent(0, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Title")
.setContentText("Message Body")
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
问题
当屏幕锁定并点击通知时,它会要求解锁屏幕,解锁时,它会启动应用程序。但
首先它显示 SubActivity,然后在后按时显示 ChildActivity,在 ChildActivity 后按时显示 MainActivity。
所以活动的顺序发生了变化。
正确的顺序是 MainActivity->SubActivity->ChildActivity (TopMost) (发生在解锁屏幕上)
提前致谢。