完成两个活动,接收相同的广播

时间:2012-09-03 19:02:46

标签: android broadcastreceiver android-activity

我有BroadcastReceiver处理系统广播,如AC Connected和断开连接。 BroadcastReceiver收到POWER_CONNECTED并启动活动“MainActivity”,解锁KeyGuard并获取WakeLock。在onCreateonResume中,我动态注册BroadcastReceiver以收听POWER_DISCONNECTED

“MainActivity”启动第二个“VideoPlayer活动”,该活动还会在BroadcastReceiver上注册POWER_DISCONNECTED收听。

当我通过adb发送ACTION_POWER_DISCONNECT时,我通过LogCat看到“MainActivity”首先停止。为什么呢?

如何处理“VideoPlayerActivity”首先完成?

由于

2 个答案:

答案 0 :(得分:1)

看这里(http://developer.android.com/reference/android/content/BroadcastReceiver.html):

  

正常广播(与Context.sendBroadcast一起发送)是完全异步的。 广播的所有接收者都以未定义的顺序运行,通常是在同一时间。这更有效,但意味着接收者不能使用结果或中止此处包含的API。

您无法保证VideoPlayerActivity会收到。

我建议创建一个单独的BroadcastReceiver(不属于活动的一部分)。在这个广播接收器中做这样的事情:

videoPlayerActivity.finish();
mainActivity.finish();

当然,您需要在活动的onCreate或onResume上初始化这两个变量。

答案 1 :(得分:0)

实际上,您已在主要活动中注册了广播接收器,因此它在BroadcastReceiver中传递主要活动的上下文,因此我只能完成该活动。

让我们搞清楚你需要做的只是在电源断开动作接收器的 onReceive()中编写这些代码行:

public void onReceive(Context context, Intent intent) {
 Intent startMain = new Intent(Intent.ACTION_MAIN);
            startMain.addCategory(Intent.CATEGORY_HOME);
            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(startMain);
}

享受