Я читал некоторые посты здесь, на Stackoverflow, и я не нашел хорошего решения, мне интересно, можно ли определить, когда пользователь долго нажимает кнопку питания при попытке выключить устройство, я хотел бы чтобы узнать, можете ли вы обнаружить это событие и разрешить или запретить показ этого диалогового окна, в котором он появляется (перезагрузка, завершение работы и т.д.)
Я пробовал это:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Toast.makeText(MainActivity.this, event.getKeyCode(), Toast.LENGTH_SHORT).show();
return true;
}
но он не отображается, также он должен работать как служба, я имею в виду, что приложение может или не может быть открыто, чтобы показать этот тост.
EDIT
Вот как я поставил onCloseSystemDialog
//home or recent button
public void onCloseSystemDialogs(String reason) {
if ("globalactions".equals(reason)) {
Toast.makeText(PowerButtonService.this, "yaps", Toast.LENGTH_SHORT).show();
Intent i= new Intent(getBaseContext(), Demo.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(i);
//} else if ("homekey".equals(reason)) {
//home key pressed
//} else if ("recentapss".equals(reason)) {
// recent apps button clicked
}
}
Он работает нормально, но только когда устройство разблокировано, когда устройство заблокировано, ничего не отображается.
Также я пытаюсь выяснить, как удалить диалоговое окно, когда пользователь нажимает кнопку питания. Я попытался это сделать:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
Но если я хочу показать это снова, как я могу это сделать?