从 StartActivity(ActivityFlags.NewTask) 返回时不调用 BroadcastReceiver OnReceive

酒壶

考虑以下代码:

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 中启动另一个活动?关于这里可能存在什么问题的任何其他线索?

酒壶

解决了!显然,当活动的 LaunchMode 设置为 SingleInstance 时它不起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

不调用BroadcastReceiver的onReceive

BroadcastReceiver的onReceive方法没有调用吗?

不会调用BroadcastReceiver的onReceive方法

Android AlarmManager,BroadcastReceiver onReceive从未调用

使用LocalBroadcastManager注册BroadcastReceiver时未调用onReceive

在setAlarm方法期间调用的Alarm BroadcastReceiver的onReceive()被调用

BroadcastReceiver OnReceive()未触发

BroadcastReceiver 的 onReceive 方法是否总是在动态注册时调用?

WALLPAPER_CHANGED的BroadcastReceiver多次调用onReceive():Android

BroadcastReceiver 中的方法 onReceive 永远不会被调用

BroadcastReceiver onReceive()线程安全吗?

BroadcastReceiver onReceive()竞争状况/死锁

是否可以在BroadcastReceiver.onReceive(..)之前调用Application.onCreate(Bundle)?

为什么我的BroadcastReceiver的onReceive中的intent.getAction()返回null?

在 onReceive 后保持 BroadcastReceiver 处于活动状态

Android BroadcastReceiver onReceive在MainActivity中更新TextView

Android BroadcastReceiver:从onReceive方法获取对象

BroadcastReceiver onReceive函数运行两次

修改BroadcastReceiver对象的OnReceive()中的图

即使在一个注册后,Android BroadcastReceiver onReceive()在android 5.1.1上调用了两次

Android 7 BroadcastReceiver onReceive intent.getExtras丢失数据

BroadcastReceiver.onReceive是否始终在UI线程中运行吗?

使用方法参考定义BroadcastReceiver.onReceive

在Android中的BroadcastReceiver类的onReceive方法中访问ArrayList项

BroadcastReceiver onReceive方法内的异步任务未运行?

如何使用BroadcastReceiver中的onReceive方法更新TextView

onReceive BroadcastReceiver 从未要求明确意图 Android android Pie

CSocket :: OnReceive并发调用

IntentService 向 Receiver 发送广播,但不调用 onReceive()