首页 > 解决方案 > 为什么挂起的意图会失去我的附加功能(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);
        }
    }

标签: androidxamarinandroid-notificationsandroid-pendingintent

解决方案


推荐阅读