как разблокировать экран при вызове BroadcastReceiver?

Как вы можете догадаться, я регистрирую сигнал тревоги AlarmManager. И BroadcastReceiver будет называться правильно. Но когда он позвонил, мой экран телефона все еще заблокирован. Я замечаю, что приложение AlarmClock по умолчанию не похоже на это. Поэтому мой вопрос в том, как разблокировать экран, когда вызывается BroadcastReceiver ? (Разблокировка экрана может заставить пользователя управлять моей деятельностью напрямую) Спасибо заранее.

2 ответов


исходный код будильника находится в исходном коде Android. AlarmClock ушел, но был заменен DeskClock. исходный код здесь. Я быстро просмотрел код, и их приемник, похоже, использует KeyguardManager. Проверьте документы, кажется, это то, что вы хотите.

EDIT: я добавлю ваши выводы здесь. Этот код должен делать:

final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
              | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
              | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

откройте действие A, которое вы хотите начать с onReceive(....). Вставьте это в onCreate () этого действия a

     final Window win= getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
              WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
               WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

убедитесь, что вы не вставляете его перед setContentView(....):)