我有BroadcastReceiver
处理系统广播,如AC Connected和断开连接。 BroadcastReceiver
收到POWER_CONNECTED
并启动活动“MainActivity”,解锁KeyGuard
并获取WakeLock
。在onCreate
和onResume
中,我动态注册BroadcastReceiver
以收听POWER_DISCONNECTED
。
“MainActivity”启动第二个“VideoPlayer活动”,该活动还会在BroadcastReceiver
上注册POWER_DISCONNECTED
收听。
当我通过adb发送ACTION_POWER_DISCONNECT
时,我通过LogCat看到“MainActivity”首先停止。为什么呢?
如何处理“VideoPlayerActivity”首先完成?
由于
答案 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);
}
享受