2012-12-30 31 views
0

在我的应用程序中有一个广播接收器,在特定的时间由RTC_WAKEUP的闹钟调用。该接收器首先获取部分锁定,以便它不会终止,然后检查条件,如果它是真实的,则启动一个活动,通过获取完全锁定和解锁键盘锁,完全打开手机。WakeLock Mechanism

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

  • 所以我想如果该设备是睡眠,将在活动开始这样 它可以获取全锁?

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

+0

我认为你的应用程序被设计为在特定的时间启动一个活动,就像本机闹铃一样,不是吗? – Huang

+0

@黄是的,这是一个提醒,但我想在开始活动之前检查简单的离线状况。是否有任何源代码可用于检查警报活动?我找不到一个。我想看看我是否做对了。 – Ali

回答

2
  1. 如果你想开始在广播接收器的活动,不要忘记添加标志: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(); 
    
+0

这就是我所做的,我的问题是如果活动始于所有或不是? – Ali

+0

我读过的一个禁用键盘锁的地方必须在power wakelock和其他相反的地方完成,哪一个更好? – Ali

+0

@Ali我写了一个类似于Activity的闹钟,我使用了上面的代码(先在onCreate()中调用disableKeyguard(),然后在onResume()中调用wl.acquire()。这对我来说可以。 – Huang