FCM和xamarin.android-广播接收器不起作用

时间:2018-07-04 11:30:14

标签: c# firebase xamarin.android firebase-cloud-messaging

我在xamarin.android中的广播接收器有问题。无法正常工作。

我的应用中有通知正在运行,我想在收到通知后更改应用中的某些内容(例如Toast消息或更改按钮的图标),但是它不起作用。我不知道自己在做什么错,也找不到解决方案,因为所有主题都与Java有关。当用户收到通知时,我需要触发某些事件,事件或广播接收器,然后我要在MainActivity中进行一些操作。

所以,这是代码。

BroadcastReceiver类:

  [BroadcastReceiver(Enabled = true, Exported = false)]
public class MyMessageReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        bool messageReceived = intent.GetBooleanExtra("messageReceived", false);
    }
}

OnMessageReceived方法:

 {
            base.OnMessageReceived(message);
            SendNotification(message.GetNotification().Body);

            LocalBroadcastManager broadcaster = LocalBroadcastManager.GetInstance(this);

            Intent intent = new Intent("message");
            intent.PutExtra("messageReceived", true);
            broadcaster.SendBroadcast(intent);
        }

以及OnResume和OnPause方法:

 protected override void OnResume()
    {
        base.OnResume();

        LocalBroadcastManager.GetInstance(this).RegisterReceiver(myReceiver, new IntentFilter("message"));
        RegisterReceiver(myReceiver, new IntentFilter("message"));
    }

    protected override void OnPause()
    {
        base.OnPause();
        LocalBroadcastManager.GetInstance(this).UnregisterReceiver(myReceiver);
    }

例如,我不知道如何在MainActivity的OnCreate方法中接收该信息?我尝试过

messageReceived = Intent.GetBooleanExtra("messageReceived", false);
        if (messageReceived)
        {
            Toast.MakeText(this, "new notification", ToastLength.Long).Show();
        }

但这不起作用,messageReceived为空。

1 个答案:

答案 0 :(得分:0)

我知道为时已晚,但总比没有好:

分析了Firebase消息传递之后,我为此目的做了一个适当的解决方法:

当您的应用程序在后台运行时,默认情况下,在收到推送通知时会调用handle intent方法:

 public override void HandleIntent(Intent p0)
{
  base.HandleIntent(intent);
  //Your code to know that you received a notification (backgrounnd)
  // Use shared preference for this 
}

不知道如何使用共享首选项检查this

有关句柄意图如何工作的更多信息,请查看我的答案here

当应用程序处于前台时,您可以简单地使用消息接收方法,例如:

 public override void OnMessageReceived(Context context, Intent intent)
{
     //Your code to know that you received a notification (backgrounnd)
     // Use shared preference for this 
}

然后,无论何时需要使用它,都可以使用共享首选项获得标志或计数或任何其他内容。

如有任何查询,请还原!