2

我有一个BroadcastReceiver处理系统广播,如 AC 连接和断开连接。BroadcastReceiver接收并启动一个活动“MainActivity”,该POWER_CONNECTED活动解锁KeyGuard并获取WakeLock. 在onCreateonResume我动态注册一个BroadcastReceiverPOWER_DISCONNECTED

“MainActivity”启动了第二个“VideoPlayer Activity”,它也注册了一个BroadcastReceiver监听POWER_DISCONNECTED

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

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

谢谢

4

2 回答 2

2

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

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

您不能保证 VideoPlayerActivity 会收到。

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

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

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

于 2012-09-03T19:24:26.143 回答
0

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

因此,让我们把你需要做的事情搞砸,只需在Power Disconnected动作接收器的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);
}

享受

于 2012-09-03T20:14:50.703 回答