Установить полноэкранный атрибут окна после возобновления работы на Android

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

Как я нашел здесь, на SO, чтобы заблокировать кнопку «Домой», мне просто нужно сделать:

@Override
public void onAttachedToWindow()
{
    super.onAttachedToWindow();
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);   
}

Основным недостатком этого является то, что строка состояния видна даже в файле манифеста, который я установил в полноэкранном режиме.

 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

Одним из решений было бы установить полноэкранный режим в коде, поэтому я

@Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }

Пока все хорошо, приложение продолжает работать в полноэкранном режиме. Однако есть одна серьезная проблема: если пользователь нажимает кнопку питания, телефон переходит в режим ожидания. При повторном нажатии и разблокировке экрана в приложении снова отображается строка состояния. Я не могу снова установить параметры окна, так как в нем уже есть содержимое. Также я думаю отключить кнопку питания, но я не знаю, как это сделать. Я могу перехватить его нажатие onKeyDown, но как мне сделать так, чтобы он ничего не делал?

@Override
        public boolean onKeyDown(int keyCode, KeyEvent event)  {

           switch (keyCode) {

                case KeyEvent.KEYCODE_POWER:
                    ????????

                default:
                    return false;
                }
        }

Любые идеи по этим вопросам? Спасибо вам всем.


person Alin    schedule 20.09.2011    source источник


Ответы (1)


На самом деле, после небольшого глубокого тестирования кажется, что настройка

this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 

производит нежелательное поведение, такое как: отсутствие сообщений Toast, не отвечающее приложение, как было сказано ранее, не позволяющее полноэкранному приложению. Поэтому я просто решил оставить кнопку «Домой» по умолчанию включенной. Было бы очень хорошо, если бы Google предложил возможность отключить кнопку... даже если бы им нужно было сделать для этого специальное разрешение.

person Alin    schedule 26.09.2011