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