Xamarin Android应用程序和FCM再次杀死和重新开放后坠毁



我在应用程序中成功实现了Firebase Cloud Messaging(FCM)推送通知。该应用在前景中可以接收通知并导航到相应的活动。但是,当我杀死该应用并尝试再次打开应用程序时。

这是我的第一个活动的代码,即飞溅活动:

  protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        Thread.Sleep(3000);
        Intent intent;
        if (string.IsNullOrEmpty(oStaticVariables.MembershipID))
        {
            intent = new Intent(this, typeof(LoginView));
        } 
        else
        {
            oStaticVariables.NewsListPreviousPosition = "";
            oStaticVariables.PTRShown = false;
            oStaticVariables.UpdateMsgShown = false;
            intent = new Intent(this, typeof(MainActivity));
        }
            StartActivity(intent);
            Finish();
        CheckForBackgroundFCMNotifications();
    }

   *Fired when app is in background and the app receives notification*
    private void CheckForBackgroundFCMNotifications()
    {
        if (Intent.Extras != null)
        {
            foreach (var key in Intent.Extras.KeySet())
            {
                var value = Intent.Extras.GetString(key);
                //Log.Debug("", "Key: {0} Value: {1}", key, value);
                if (key == "NotifyId")
                {
                    oStaticVariables.GCMID = value;
                }
                if (key == "Header")
                {
                    oStaticVariables.GCMSubject = value;
                }
            }
            Intent nextActivity = new Intent(this, typeof(NewsNotifications));
            StartActivity(nextActivity);
        }
    }

如果我删除CheckForbackgroundFcmnotifications()方法,该应用在杀死和重新打开后不会崩溃。但是我确实需要这种方法来获取通知详细信息,并在应用程序在后台时导航到各自的活动。

请帮助

没有堆栈跟踪我们不能说,但是我很确定它要么是因为您正在从已经完成的活动中启动一项活动,要么是因为您正在启动两个活动。无论哪种方式,您都称逻辑是错误的。

首先检查额外的意图。然后,如果有额外的内容,请处理它们并开始适当的活动(在您的情况下,新闻说明 - 顺便说一句,您应该真正称呼此newsnotificativeativational for命名一致性),如果不启动正常活动(在您的情况下,Main Activitive)。

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);    
        if (Intent.Extras == null)
        {   
            if (string.IsNullOrEmpty(oStaticVariables.MembershipID))
            {
                var intent = new Intent(this, typeof(LoginView));
                StartActivity(intent);
            } 
            else
            {
                intent.PutExtra("NewsListPreviousPosition", "");
                intent.PutExtra("PTRShown", false);
                intent.PutExtra("UpdateMsgShown", false);
                var intent = new Intent(this, typeof(MainActivity));
                StartActivity(intent);
            }
            Finish();
        }
        else
        {
            CheckForBackgroundFCMNotifications();
        } 
    }
   // Called when app is in background and the app receives notification
    private void CheckForBackgroundFCMNotifications()
    {
         Intent nextActivity = new Intent(this, typeof(NewsNotificationsActivity));
         foreach (var key in Intent.Extras.KeySet())
         {
                try  // just in case the value is not a string
                {
                    var value = Intent.Extras.GetString(key);
                    //Log.Debug("", "Key: {0} Value: {1}", key, value);
                    if (key == "NotifyId")
                        nextActivity.PutExtra("NotifyId", value);
                    if (key == "Header")
                        nextActivity.PutExtra("Header", value);
                catch {}
        }
        StartActivity(nextActivity);
    }

然后将额外的值从主动和新闻调查性的意图中提取出来,而不是从不同活动中的静态变量中提取出来。您可能还想放上额外的提取

相关内容

  • 没有找到相关文章

最新更新