考虑以下代码:
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] 删除。
我来说两句