Android FLAG_SHOW_WHEN_LOCKED и блокировка клавиатуры

В моем приложении есть активность, которая запускается BroadcastReceiver при получении трансляции android.intent.action.BOOT_COMPLETED.

Активность должна отображаться в полноэкранном режиме через Keyguard (безопасно). Активность использует тему Theme.NoTitleBar.Fullscreen, установленную в манифесте приложения и WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED, чтобы поместить Keyguard позади.

Я не пытаюсь заменить или отключить блокировку клавиатуры. Активность должна просто отображать некоторую диагностическую информацию об устройстве и оставаться активной до тех пор, пока пользователь не закроет ее.

Итак, устройство загружается, обычно появляется keyguard и через несколько секунд также запускается активность. Активность красиво отображается поверх клавиатуры в полноэкранном режиме без строки заголовка. Все это отлично работало на моих тестовых устройствах Sony и Samsung.

Сегодня я тестировал приложение на устройстве LG G2 (Android 4.4.2) и заметил странную проблему. Проблема в том, что полноэкранная активность закрывается (приостанавливается), а блокировка клавиатуры снова активируется.

Я потратил полдня на изучение кода и пытался понять, что вызывает такое поведение. Затем, наконец, я заметил, что моя активность отклоняется каждый раз, когда системное уведомление отображается в строке заголовка. В моем случае уведомление «Батарея заряжена» и «Отключите для экономии заряда батареи». У меня не было возможности проверить, но, вероятно, то же самое произойдет и с другими уведомлениями.

Есть ли способ подавить системные уведомления или игнорировать их, чтобы полноэкранная активность не была приостановлена?


person jjarv    schedule 29.06.2015    source источник


Ответы (1)


Попробуйте использовать приведенные ниже фрагменты кода,

  Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
  this.sendBroadcast(intent);

Это передается, когда действие пользователя должно запросить временное системное диалоговое окно для закрытия. Некоторыми примерами временных системных диалогов являются шторка окна уведомлений и диалог недавних задач.

См. ACTION_CLOSE_SYSTEM_DIALOGS.

person Daud Arfin    schedule 29.06.2015
comment
Я пробовал, не получилось. Странно то, что когда у меня кабель не подключен (не заряжается), то все работает нормально. Я даже могу провести пальцем по экрану и области строки состояния, и она прекрасно отображается в полноэкранном режиме, не закрывая ее. - person jjarv; 29.06.2015
comment
Оказывается, это не имеет прямого отношения к панели уведомлений. После еще нескольких тестов я обнаружил, что в устройстве LG есть настройка: Подключение к ПК -> USB-подключение -> Спрашивать при подключении. Когда этот флажок не установлен, все работает нормально, если флажок установлен, полноэкранная активность закрывается. Любые идеи, как это контролировать? - person jjarv; 29.06.2015