2014-10-31 63 views
0

什麼是收購一個BroadcastReceiver一個激活鎖定,並保持它,直到活動開始以正確的方式 - 這就是我:正確的模式爲BroadcastReceiver獲取wakelock啓動一個活動?

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     PowerManager pm = (PowerManager) 
      context.getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(
      PowerManager.PARTIAL_WAKE_LOCK, 
      "tag"); 
     wl.acquire(); 

     Intent intent = new Intent(context, MyActivity.class); 
     context.startActivity(intent); 
    } 
} 

public class MyActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     PowerManager pm = (PowerManager) 
      context.getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(
      PowerManager.PARTIAL_WAKE_LOCK, 
      "tag"); 
     wl.release(); 

     // I want to keep the screen on now. 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    } 
} 

// The broadcastreceiver is fired via AlarmManager: 
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
alarmManager.setExact(AlarmManager.RTC_WAKEUP, someTime, pendingIntent); 

此外,如果廣播接收器被同時燒製會發生什麼 - 我猜喚醒鎖管理器是同步的,這不會是一個問題?

謝謝

+0

你使用AlarmManager WAKEUP嗎? – VM4 2014-10-31 18:47:49

+0

@ VM4不,我不是,我更新了答案以準確顯示我的內容。 – user1219278 2014-10-31 18:51:24

+0

究竟是什麼激發你正在聽的廣播? – VM4 2014-10-31 18:52:50

回答

0

一旦獲取鎖,你必須保持鎖定的這種情況下,一旦工作完成後釋放正是實例。你可以查看源代碼WakefulBroadcastReceiver.java以更好地瞭解如何實現這一點,以及used

此外,從廣播接收器開始活動並不是一個好主意。想象一下,你玩一款遊戲,並在你的手機開始活動的關卡中。我不認爲你會喜歡它。您應該發佈通知,以便用戶在需要時可以稍後打開活動。

+0

是的,我同意@beworker,這是一個鬧鐘,所以我認爲在這種情況下可以打斷用戶。 – user1219278 2014-10-31 18:53:45

+0

我明白你對WakefulBroadcastReceiver的看法,現在將通讀。 – user1219278 2014-10-31 18:57:42

+0

你可以爲Activity創建類似的東西。它基於靜態列表,所以它也可以用於Activity。唯一需要注意的是可靠釋放喚醒鎖。否則設備會放電非常快。 – 2014-10-31 20:07:26

相關問題