从通知中检测应用激活

时间:2017-11-08 19:06:20

标签: xamarin.android google-cloud-messaging

我有一个使用GCM进行推送通知的应用程序。我已经收到消息并在打开应用程序时正确操作。问题是我需要应用程序在通知关闭时打开特定文章。

如何检查应用是否是从通知中打开而不是启动器以及如何获取所述通知数据?

1 个答案:

答案 0 :(得分:1)

  

检查应用是否是从通知中打开而不是启动器

您可以使用PendingIntent.GetActivity()来实现此功能。当您在Notification中添加此方法时,它会检索将PendingIntent开始新Activity的{​​{1}}。这是一个基本样本:

//Set the activity, it will be opened when click the notification
var intent = new Intent(context, typeof(NotificationActivity));

intent.AddFlags(ActivityFlags.ClearTop);

intent.PutExtra("name", "York");
intent.PutExtra("Id", 1234);

var pendingIntent = PendingIntent.GetActivity(context, 0, intent, PendingIntentFlags.OneShot);

NotificationManager notificationManager = (NotificationManager)context.GetSystemService(Context.NotificationService);

var notificationBuilder = new NotificationCompat.Builder(context)
     .SetSmallIcon(Resource.Drawable.Icon)
     .SetContentTitle("FCM Message")
     .SetContentText(messageBody)
     .SetAutoCancel(true)
     .SetContentIntent(pendingIntent);

notificationManager.Notify(0, notificationBuilder.Build());
  

如何获取所述通知数据?

如果使用Intent传递数据如下:

intent.PutExtra("name", "York");
intent.PutExtra("Id", 1234);

点击notification打开Activity,您可以恢复以下数据:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    if (Intent != null)
    {
        string name = Intent.GetStringExtra("name");
        int id = Intent.GetIntExtra("Id", 0);
    }  
    ...
}