Android如何通过编程关闭关机菜单

3
我如何通过编程的方式关闭Android电源菜单?类似于alarmy这样的应用程序可以实现这一功能。
我无法从Android文档中找到是否存在事件监听器来通知我们电源菜单已打开。
物理上,如果我点击屏幕上除电源菜单以外的任何区域或按返回按钮,菜单就会关闭。
我想知道如何通过编程的方式实现这一点(我知道这是可能的,可能是通过某些解决方法而不是直接通过API实现,因为alarmy可以实现它)。
2个回答

3
您可以使用以下代码来检测电源按钮的按下。
@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();
 //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://dev59.com/yVkT5IYBdhLWcg3wG70_#39213344

一旦您收到此意图,您就知道该PO(?)


看起来这就是我在找的解决方案。点赞了。我要试一试,如果有效就标记为答案。谢谢伙计! - rahulserver
欢迎。如果你遇到任何问题,请告诉我。 - Mayank Kumar Chaudhari

0

它被称为自定义对话框,你可以从链接创建,并且有类似的属性

 dialog.setCancelable(false);

使用这个属性,你应该可以实现你想要的功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接