Android 在正确的活动中发送通知

Android 在正确的活动中发送通知,android,android-intent,xamarin,push-notification,google-cloud-messaging,Android,Android Intent,Xamarin,Push Notification,Google Cloud Messaging,我对Android(Xamarin)上的通知有问题。 我的设想是: 我有一个类处理(继承GcmServiceBase)消息并创建通知对象。 在这个类中,我以这种方式重写了OnMessage方法: protected override void OnMessage(Context context, Intent intent) { if (intent != null || intent.Extras != null) { string messageText =

我对Android(Xamarin)上的通知有问题。 我的设想是: 我有一个类处理(继承
GcmServiceBase
)消息并创建通知对象。 在这个类中,我以这种方式重写了
OnMessage
方法:

protected override void OnMessage(Context context, Intent intent)
{
    if (intent != null || intent.Extras != null)
    {
        string messageText = intent.Extras.GetString("message");
        string messageTitle = intent.Extras.GetString("title");
        Intent app_launch_intent = new Intent(context, typeof(Project.WaitForm));         
    if (App.Instance == null)
    {
        Console.WriteLine("GCM: Notification received while application not running...");  
        app_launch_intent.AddFlags(ActivityFlags.ClearTop);
        app_launch_intent.AddFlags(ActivityFlags.SingleTop);
    }

    else if ((App.Instance != null) && (App.Instance.mainActivity.IsInBackground))
    {
        App.Instance.Logger.Write("GCM: Notification received while application in background...", LogType.Default, LogLevel.Info);
        app_launch_intent = new Intent(context, App.Instance.mainActivity.GetType());
    }

    else
    {
        App.Instance.Logger.Write("GCM: Notification received while application in foreground...", LogType.Default, LogLevel.Info);
        app_launch_intent = new Intent(context, App.Instance.mainActivity.GetType());
        app_launch_intent.AddFlags(ActivityFlags.SingleTop);
    }

    app_launch_intent.PutExtras(intent.Extras);
    app_launch_intent.PutExtra("isNotify", true);
    PendingIntent pendingIntent = PendingIntent.GetActivity(this, PushService.notificationId, app_launch_intent, PendingIntentFlags.OneShot);
    createNotification(context, app_launch_intent, pendingIntent, messageTitle, messageText);
    if (App.Instance == null)
    {
        Console.WriteLine("GCM: Notification object correctly created."); 
    }
    else
    {
        App.Instance.Logger.Write("GCM: Notification object correctly created.", LogType.Default, LogLevel.Info);
    }
    }
}

public void createNotification(Context context, Intent result_intent, PendingIntent pendingIntent,  string title, string desc)
{
    NotificationManager notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;

Notification.Builder builder = new Notification.Builder(this)
    .SetContentIntent(pendingIntent)
    .SetAutoCancel(true)
    .SetContentTitle(title)
    .SetContentText(desc)
    .SetSmallIcon(Resource.Drawable.notify_icon_transparent)
    .SetLargeIcon(PushService.IconAgenda)
    .SetTicker(title);
Notification notification = builder.Build();
PushService.notificationId += 1;
notificationManager.Notify(PushService.notificationId, notification);
}

如您所见,当收到消息时,我会测试应用程序对象是否存在,然后创建意图和通知对象(
App.Instance
是一个单独的对象,包含有关应用程序本身的信息。
mainActivity
是屏幕上显示的当前活动)

这样,当单击通知时,堆栈顶部的最后一个活动(如果应用程序位于前台,则为当前屏幕上的活动,或者应用程序进入后台之前的最后一个屏幕上的活动)将出现 启动,其中的某些内容将处理通知本身,由
OnNewIntent
调用

除了一件事外,一切正常:

假设我有3个活动叫做A,B,C

当屏幕上的当前活动为A时,我启动应用程序,然后收到两个不同的通知。 两者都将显示在顶部栏中,不会出现问题。 我单击其中的第一个,它会要求我打开另一个活动(在当前活动的
OnNewEvent
中捕获,并且由于通知类型),因此我说“是”,然后我将转换到活动C

到达活动C并完成一些工作后,我单击另一个通知

点击它,我将被带到活动A,然后通知将被处理。 我知道这个“问题”是因为在创建notify时,我使用了
App.Instance.mainActivity.GetType()
来创建将用于创建
pendingent
的意图,而在那个时候,两者都是活动A。 所以我的问题是:

如何处理屏幕上最后一个活动中的第二次通知单击(因此在活动C中)而不是活动A

(我添加Xamarin标记只是因为上面的代码是用C#编写的,而不是用Java编写的,所以对于本地Android开发人员来说可能听起来很奇怪)