从StartActivity(ActivityFlags.NewTask)返回时,没有调用BroadcastReceiver OnReceive。

问题描述 投票:0回答:1

考虑以下代码。

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发送了一个广播意图,而这个广播意图应该是用 预期意图. 当收到 预期意图额外 有一个特定的值,然后我启动另一个活动。由于我的应用程序是在后台的,所以调用了OnPause。启动的活动可以随时返回,使我的应用程序返回,因此调用OnResume。

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

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

我是否处理注册错误?还是我不应该在OnReceive中启动另一个活动?有什么其他线索可以说明这里的问题吗?

android xamarin xamarin.forms xamarin.android
1个回答
0
投票

SOLVED!显然,当活动的LaunchMode被设置为SingleInstance时,它不工作。

© www.soinside.com 2019 - 2024. All rights reserved.