我一直在 Stackoverflow 上阅读一些帖子,但没有找到好的解决方案,我想知道是否可以检测用户在尝试关闭设备电源时长按电源按钮的时间,我想知道您是否可以检测到该事件,并允许或不显示出现的对话框(重启、关机等)
我试过这个:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Toast.makeText(MainActivity.this, event.getKeyCode(), Toast.LENGTH_SHORT).show();
return true;
}
但它没有出现,它也应该作为一项服务工作,我的意思是可以打开或不打开该应用程序以显示该吐司。
编辑
这就是我放置 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);
但是如果我想再次展示它,我该怎么办呢?
原文由 Skizo-ozᴉʞS 发布,翻译遵循 CC BY-SA 4.0 许可协议
分享我的方法来做你想实现的事情。
基本上,它的作用是
启动服务并添加一个特殊的视图
WindowManager
在
View
的onCloseSystemDialogs
方法中等待一个动作。显现:
服务布局: