【问题标题】:Android close power off menu programmaticallyAndroid以编程方式关闭电源关闭菜单
【发布时间】:2018-12-08 03:55:46
【问题描述】:

如何以编程方式关闭 Android 电源菜单?像alarmy 这样的应用程序正在这样做。

我无法从 Android 文档中找到是否有事件侦听器通知我们电源菜单已打开。

从物理上讲,如果我点击屏幕上除电源菜单以外的任何区域或按返回按钮,菜单就会被取消。

我想知道如何以编程方式执行此操作(我知道这是可能的,如果不是直接通过 api 可能通过一些解决方法,因为警报可以做到)。

【问题讨论】:

    标签: java android


    【解决方案1】:

    您可以使用以下代码来检测电源按钮是否按下。

    @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

    【讨论】:

    • 看起来像我正在寻找的解决方案。赞成。试一试,如果有效,则标记为答案。谢谢大佬!!
    • 欢迎。如果您遇到任何问题,请告诉我。
    【解决方案2】:

    它称为自定义对话框,您可以从link 中创建,并且有类似的属性

     dialog.setCancelable(false);
    

    使用这个属性应该是可能的。

    【讨论】: