我一直在Stackoverflow上阅读一些帖子,但没有找到一个好的解决方案,我想知道是否可以检测用户长按电源按钮试图关闭设备时,能否检测到该事件,并允许或不允许显示出现的对话框(重新启动、关机等)。
我已经尝试过这个:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Toast.makeText(MainActivity.this, event.getKeyCode(), Toast.LENGTH_SHORT).show();
return true;
}
但是它没有显示出来,而且它应该作为一个服务运行,我的意思是应用程序可以或不可以打开以显示那个toast。
编辑
这就是我如何使用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);
但是如果我想再次显示它,我该怎么做?