【问题标题】:BroadcastReceiver OnReceive not called when returning from StartActivity(ActivityFlags.NewTask)从 StartActivity(ActivityFlags.NewTask) 返回时未调用 BroadcastReceiver OnReceive
【发布时间】:2020-05-18 08:52:13
【问题描述】:

考虑以下代码:

public class MyBroadcastReceiver : BroadcastReceiver
{
   private Activity _activity;
   private IntentFilter _intentFilter;

   public MyBroadcastReceiver(Activity activity)
   {
      _activity = activity;
      _intentFilter = new IntentFilter();
      //setup IntentFilter...
   }

   public void OnReceive(Intent intent)
   {
      if(intent.Action != "<expected intent>")
         return;

      if(intent.GetStringExtra("<extra>") == "<expected value>")
      {
         Intent launchIntent = new Intent();
         launchIntent.SetClassName("<packagename>", "<activityname>");
         launchIntent.SetFlags(ActivityFlags.NewTask);
         _activity.StartActivity(launchIntent);
      }
   }

   public void OnResume()
   {
      _activity.RegisterReceiver(this, _intentFilter);

      SendBroadcast(); //private method which sends a broadcast intent
   }

   public void OnPause()
   {
      _activity.UnregisterReceiver(this);
   }
}

我在 OnResume() 中注册接收器并使用 SendBroadcast 发送一个广播意图,该意图应该以 预期意图 响应。当接收到 expected intent 并且 extra 具有特定值时,我会启动另一个活动。由于我的应用程序是后台的,因此调用了 OnPause。启动的 Activity 可以在任何时候返回我的应用程序,因此会调用 OnResume。

但是当我的应用程序从启动的活动关闭中回到前台时,MyBroadcastReceiver 不会收到任何广播,但是我可以通过查看 adb 日志来确认广播肯定是发送的。 p>

奇怪的是,当我转到主屏幕并重新打开我的应用程序时,一切都按预期工作。我发送广播“请求”并按预期调用 OnReceive。从另一个启动的活动恢复时,BroadcastReceiver 似乎没有正确注册。

我处理注册错误吗?还是我不应该在 OnReceive 中启动另一个活动?关于这里可能是什么问题的任何其他线索?

【问题讨论】:

    标签: android xamarin xamarin.forms xamarin.android


    【解决方案1】:

    已解决! 显然当Activity的LaunchMode设置为SingleInstance时它不起作用。

    【讨论】:

    • 您可以将您的解决方案标记为答案。这对有类似问题的其他社区成员很有帮助。
    • 不幸的是,我收到错误消息,我只能在 2 天后接受自己的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多