考虑以下代码。
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中启动另一个活动?有什么其他线索可以说明这里的问题吗?
SOLVED!显然,当活动的LaunchMode被设置为SingleInstance时,它不工作。