Я знаю, я знаю, это то, чего мне не следует делать... но я все равно делаю это, потому что мое приложение предназначено для малышей, и мне нужно заблокировать доступ к домашнему ключу.
Как я нашел здесь, на 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;
}
}
Любые идеи по этим вопросам? Спасибо вам всем.