【发布时间】: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