通过通知打开现有活动

时间:2017-10-07 18:34:42

标签: c# xamarin xamarin.android

我的应用程序有MainActivityMessageInboxActivity。如果用户将应用程序置于后台并收到消息,则会显示本地通知。当用户点击通知时,我想恢复当前正在运行的MainActivity。但是,在我的测试中,它会销毁当前的MainActivity,显示MessageInboxActivity,然后按下后退按钮会导致创建新的MainActivity

private void SendLocalNotification()
{
    var notificationID = 1;

    var title = "New Message";
    var message = Constants.Message.NewMessageNotificationText;
    var builder = new NotificationCompat.Builder(Application.Context);
    builder.SetContentTitle(title);
    builder.SetContentText(message);
    builder.SetAutoCancel(true);
    builder.SetSmallIcon(Resource.Drawable.pn_message_icon);

    var mainIntent = new Intent(this, typeof(MainActivity));
    var finalIntent = new Intent(this, typeof(MessageInboxActivity));
    var stackBuilder = Android.Support.V4.App.TaskStackBuilder.Create(Application.Context);
    stackBuilder.AddNextIntent(mainIntent);
    stackBuilder.AddNextIntent(finalIntent);
    var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent);
    builder.SetContentIntent(resultPendingIntent);

    var notificationManager = NotificationManagerCompat.From(Application.Context);
    notificationManager.Notify(notificationID, builder.Build());
}

MainActivity设为LaunchMode=SingleTask

[Activity(Label = "MainActivity", Theme = "@style/MyTheme", 
          WindowSoftInputMode = SoftInput.AdjustPan, ScreenOrientation = ScreenOrientation.Portrait, 
          LaunchMode = LaunchMode.SingleTask)]
public class MainActivity : BaseActivity

如何让现有的MainActivity继续而不是为新的销毁?我做了一些搜索,并认为我正确地遵循了答案,但似乎没有任何效果。

1 个答案:

答案 0 :(得分:1)

您可以参考文档activity并搜索属性android:launchMode

当您使用SingleTaskMainActivity设置为LaunchMode = LaunchMode.SingleTask时,您的MainActivity只允许系统中有一个实例(也称为Singleton) 。如果系统中存在一个Activity实例,那么整个Task实例将被移动到顶部,而Intent将通过onNewIntent()方法传递。

对于您的场景,您可以将LaunchMode设置为LaunchMode.SingleTop,对于此模式,如果调用者任务中堆栈顶部已存在具有相同类型的Activity实例,则会不是任何新的Activity创建,而是通过onNewIntent()方法将Intent发送到现有的Activity实例。