您可以使用以下代码来检测电源按钮的按下。
@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://dev59.com/yVkT5IYBdhLWcg3wG70_#39197768
现在,为了防止系统弹出对话框,您可以广播关闭所有系统对话框。
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();
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://dev59.com/yVkT5IYBdhLWcg3wG70_#39213344
一旦您收到此意图,您就知道该PO(?)