android - 为什么挂起的意图会失去我的附加功能(Firebase 通知)?
问题描述
在我向您展示代码片段之前,我想说它在应用程序处于前台时工作。我试图在收到通知时立即启动活动并且它运行良好,但待处理的意图失去了额外的意图,我无法在加载活动中获取数据。明确通知不会在应用程序运行时出现,因此每当用户点击通知应用程序时,应用程序就会在后台运行。
通知接收者:
private void SendNotification(Firebase.Messaging.RemoteMessage message)
{
var intent = new Intent(this, typeof(LoadingActivity));
if (message.Data.TryGetValue("Page", out string value))
{
Menu page = (Menu)int.Parse(value);
switch (page)
{
case Menu.Sales:
{
if (message.Data.TryGetValue("DetailId", out string SaleId))
intent.PutExtra("SaleId", SaleId);
break;
}
case Menu.Recipes:
{
if (message.Data.TryGetValue("DetailId", out string RecipeId))
intent.PutExtra("RecipeId", RecipeId);
break;
}
case Menu.News:
{
if (message.Data.TryGetValue("DetailId", out string NewsId))
intent.PutExtra("NewsId", NewsId);
break;
}
case Menu.ExclusiveProducts:
{
if (message.Data.TryGetValue("DetailId", out string SpecialProductid))
intent.PutExtra("SpecialProductid", SpecialProductid);
break;
}
case Menu.CookingAdvices:
{
if (message.Data.TryGetValue("DetailId", out string CookingAdviceId))
intent.PutExtra("CookingAdviceId", CookingAdviceId);
break;
}
}
}
intent.AddFlags(ActivityFlags.ClearTop);
int uniqueInt = (int)((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) & 0xfffffff);
var pendingIntent = PendingIntent.GetActivity(this, uniqueInt, intent, PendingIntentFlags.OneShot);
var defaultSoundUri = RingtoneManager.GetDefaultUri(RingtoneType.Notification);
var notificationBuilder = new NotificationCompat.Builder(this)
.SetContentTitle(message.GetNotification().Title)
.SetContentText(message.GetNotification().Body)
.SetAutoCancel(true)
.SetSmallIcon(Resource.Drawable.ic_launcher)
.SetSound(defaultSoundUri)
.SetContentIntent(pendingIntent);
var notificationManager = (NotificationManager)GetSystemService(Service.NotificationService);
notificationManager.Notify(0, notificationBuilder.Build());
}
当我尝试访问额外的意图时,这是我的加载活动 OnCreate
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
TransferInstances.Instance.ScreenHeight = this.Resources.DisplayMetrics.HeightPixels;
TransferInstances.Instance.ScreenWidth = this.Resources.DisplayMetrics.WidthPixels;
if (FirstLaunch)
{
try
{
AppCore.RegisterServices(GetLocalFilePath("x.db3"), new AlertDialogService(), null, new DeviceIdService());
CachedImageRenderer.Init(true);
CarouselView.FormsPlugin.Android.CarouselViewRenderer.Init();
FFImageLoading.ImageService.Instance.Initialize();
Forms.Init(this, savedInstanceState);
GetStartedBtn.Click += GetStartedBtn_Click;
FBase.Instance.InitFirebase(this);
FBase.Instance.InitGoogleSignIn(this);
CreateNotificationChannel();
FirstLaunch = false;
}catch(Exception){}
}
Intent m_intent = new Intent(this, typeof(MainActivity));
bool notificationReceived = false;
if (int.TryParse(Intent.GetStringExtra("CookingAdviceId"), out int CookingAdviceId))
{
notificationReceived = true;
m_intent.PutExtra("CookingAdviceId", CookingAdviceId);
}
else if (int.TryParse(Intent.GetStringExtra("NewsId"), out int NewsId))
{
notificationReceived = true;
m_intent.PutExtra("NewsId", NewsId);
}
else if (int.TryParse(Intent.GetStringExtra("SaleId"), out int SaleId))
{
notificationReceived = true;
m_intent.PutExtra("SaleId", SaleId);
}
else if (int.TryParse(Intent.GetStringExtra("RecipeId"), out int RecipeId))
{
notificationReceived = true;
m_intent.PutExtra("RecipeId", RecipeId);
}
else if (int.TryParse(Intent.GetStringExtra("SpecialProductid"), out int SpecialProductid))
{
notificationReceived = true;
m_intent.PutExtra("SpecialProductid", SpecialProductid);
}
if (notificationReceived)
{
m_intent.AddFlags(ActivityFlags.NoAnimation);
m_intent.AddFlags(ActivityFlags.ClearTop);
StartActivity(m_intent);
}
}
解决方案
推荐阅读
- python - 如何在 Plotly/Python 中制作“市场深度”图表?
- python-3.x - Python Requests-HTML 提取 SRC
- java - 程序不打印索引 0 处的元素
- javascript - 我应该将与数据库交互的 JS 代码放在哪里
- ajax - DataTables 警告:使用 Json 请求未知参数“FileName”...
- header - 仅在父级中固定标题
- scala - Apache Spark 3 和向后兼容性?
- reactjs - 到达路由器中的无限循环
- html - 如何以最有效的方式将 div 水平和垂直居中?
- html - 类似 Trello 的 CSS 网格布局:如何滚动卡片列表并显示标题和页脚