【发布时间】:2018-12-08 03:55:46
【问题描述】:
如何以编程方式关闭 Android 电源菜单?像alarmy 这样的应用程序正在这样做。
我无法从 Android 文档中找到是否有事件侦听器通知我们电源菜单已打开。
从物理上讲,如果我点击屏幕上除电源菜单以外的任何区域或按返回按钮,菜单就会被取消。
我想知道如何以编程方式执行此操作(我知道这是可能的,如果不是直接通过 api 可能通过一些解决方法,因为警报可以做到)。
【问题讨论】:
如何以编程方式关闭 Android 电源菜单?像alarmy 这样的应用程序正在这样做。
我无法从 Android 文档中找到是否有事件侦听器通知我们电源菜单已打开。
从物理上讲,如果我点击屏幕上除电源菜单以外的任何区域或按返回按钮,菜单就会被取消。
我想知道如何以编程方式执行此操作(我知道这是可能的,如果不是直接通过 api 可能通过一些解决方法,因为警报可以做到)。
【问题讨论】:
您可以使用以下代码来检测电源按钮是否按下。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyPressed = event.getKeyCode();
if(keyPressed==KeyEvent.KEYCODE_POWER){
Log.d("###","Power button long click");
Toast.makeText(MainActivity.this, "Clicked: "+keyPressed, Toast.LENGTH_SHORT).show();
return true;}
else
return super.dispatchKeyEvent(event);
}
学分https://*.com/a/39197768/9640177
现在为防止系统显示对话框,您可以广播关闭所有系统对话框。
sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
完整的解决方案
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyPressed = event.getKeyCode();
if(keyPressed==KeyEvent.KEYCODE_POWER){
Log.d("###","Power button long click");
Toast.makeText(MainActivity.this, "Clicked: "+keyPressed, Toast.LENGTH_SHORT).show();
//send broadcast to close all dialogs
sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
return true;}
else
return super.dispatchKeyEvent(event);
}
如果你想在关机前执行一个小动作,你可以这样做。 您可以使用意图过滤器来监听以下意图。
在您的清单中
<uses-permission android:name="android.permission.DEVICE_POWER" />
....
....//other stuff goes here.
<receiver android:name=".ShutdownReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
<action android:name="android.intent.action.QUICKBOOT_POWEROFF" />
</intent-filter>
</receiver>
信用https://*.com/a/39213344/9640177
一旦您收到此意图,您就知道该 po
【讨论】:
【讨论】: