0

在我的应用程序中有一个广播接收器,它在特定时间由带有 RTC_WAKEUP 的警报调用。此接收器首先获取部分锁定,因此它不会终止,然后检查条件,如果为真,则启动一个活动,通过获取完整锁定和解锁键盘保护来完全打开手机。

经过一些测试和试验,我发现广播接收器的生命周期在开始活动之前就结束了,并且一旦结束,部分锁定就会被释放。

  • 所以我想知道设备是否处于睡眠状态,活动是否会启动以便获得完全锁定?

  • 或者一旦广播接收器结束,设备就会重新进入睡眠状态,并且活动的开始被推迟到它再次醒来的时候?

4

2 回答 2

2
  1. 如果要在 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);
            } 
    
     }
    
  2. 使用 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();
    
于 2012-12-30T15:14:45.130 回答
0

在浏览 GCM 手册时,我发现了以下章节:

http://developer.android.com/google/gcm/gcm.html#handling_intents

我认为您必须在仍然处于 BroadcastReceiver#onReceive 的同时获得 WakeLock。他们在 IntentService 中使用静态 WakeLock。

于 2013-01-21T14:07:10.010 回答