唤醒机制

时间:2012-12-30 14:59:04

标签: android

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

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

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

  • 或者一旦广播接收器结束,设备就会返回 睡眠和活动开始被推迟到它再次醒来时?

2 个答案:

答案 0 :(得分: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();
    

答案 1 :(得分:0)

在查看GCM手册时,我发现了以下章节:

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

我认为你必须在仍然在BroadcastReceiver#onReceive中时获取WakeLock。他们在IntentService中使用静态WakeLock。