2012-12-30 62 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