在我的应用程序中有一个广播接收器,在特定时间由RTC_WAKEUP报警。该接收器首先获得部分锁定,因此它不会终止然后检查条件,如果是真的,则启动一个活动,通过获取完全锁定和解锁键盘锁定来完全打开电话。
经过一些测试和试验后,我发现广播接收器的生命周期在开始活动之前结束,一旦结束,部分锁定就会被释放。
所以我想知道设备是否处于睡眠状态,活动是否会开始 它可以获得完全锁定?
或者一旦广播接收器结束,设备就会返回 睡眠和活动开始被推迟到它再次醒来时?
答案 0 :(得分:2)
如果您想在BroadcastReceiver中启动一个Activity,请不要忘记添加标志:FLAG_ACTIVITY_NEW_TASK
public void onReceive(Context context, Intent i) {
if (check condition) {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(context,THE_ACTIVTY_YOU_WANT_TO_START.class);
context.startActivity(intent);
}
}
使用FULL_WAKE_LOCK强制打开屏幕,在onCreate()方法中添加以下代码来执行此操作。
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
kl = km.newKeyguardLock("info");
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "info");
kl.disableKeyguard();
答案 1 :(得分:0)
在查看GCM手册时,我发现了以下章节:
http://developer.android.com/google/gcm/gcm.html#handling_intents
我认为你必须在仍然在BroadcastReceiver#onReceive中时获取WakeLock。他们在IntentService中使用静态WakeLock。