You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android如何通过编程方式调起系统Power Menu电源菜单

安卓调起系统电源关机/重启对话框实现方案

你在Play Store看到的这类工具没有用什么黑科技,核心就是通过安卓无障碍服务提供的全局动作API直接唤起系统原生电源菜单,不需要ROOT、不需要系统签名,只需要用户手动给应用开启无障碍权限即可,实现效果和长按实体电源键弹出的菜单完全一致,和你给出的演示效果匹配。

电源对话框效果演示

具体实现步骤

1. 配置无障碍服务权限

首先在项目res/xml目录下新建无障碍服务配置文件,比如命名为power_accessibility_config.xml,必须开启手势执行权限,配置如下:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canPerformGestures="true"
    android:description="@string/accessibility_tip"
    android:notificationTimeout="100" />

注意:android:canPerformGestures="true"是必填项,没有这个配置无法执行全局操作。其中accessibility_tip是给用户看的权限说明,要明确写清楚开启权限是用来唤起电源菜单,不要隐瞒用途,否则上架应用市场会被拒。

2. 在清单文件注册无障碍服务

在AndroidManifest.xml中注册自定义的无障碍服务类,关联上面写好的配置文件:

<service
    android:name=".PowerAccessibilityService"
    android:exported="true"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/power_accessibility_config" />
</service>

3. 编写服务逻辑触发电源菜单

新建类继承AccessibilityService,直接调用系统提供的全局动作API即可,不需要自己模拟按键、注入事件:

class PowerAccessibilityService : AccessibilityService() {
    companion object {
        // 服务运行状态标记,可根据自己的业务逻辑调整实现
        var isRunning = false
    }

    override fun onServiceConnected() {
        super.onServiceConnected()
        isRunning = true
    }

    override fun onAccessibilityEvent(event: AccessibilityEvent?) {
        // 不需要处理具体事件,留空即可
    }

    override fun onInterrupt() {
        isRunning = false
    }

    // 对外调用的方法,触发系统电源菜单
    fun openSystemPowerMenu() {
        // 系统预置全局动作:唤起电源对话框
        performGlobalAction(GLOBAL_ACTION_POWER_DIALOG)
    }
}

用户开启无障碍服务后,只要调用openSystemPowerMenu()方法,就会直接弹出系统原生电源菜单,自带关机、重启、紧急呼叫等系统默认选项,和长按电源键的效果完全一致。

注意事项

  • 该方案仅支持Android 5.0(API级别21)及以上系统,低版本安卓没有开放这个全局动作API,无法实现该效果。
  • 无障碍权限属于特殊敏感权限,应用无法自动申请,必须先检测服务是否开启,未开启时跳转系统无障碍设置页面,引导用户手动开启。
  • 不要尝试用模拟长按电源键的注入事件方案,不同厂商ROM对电源键的事件拦截逻辑差异很大,很容易出现适配问题。直接调用GLOBAL_ACTION_POWER_DIALOG是官方标准API,所有通过CTS兼容性认证的设备都必须支持,适配成本最低。
  • 上架应用市场时必须明确告知用户无障碍权限的用途,不得滥用无障碍权限采集用户数据,否则会被应用市场下架。

内容的提问来源于stack exchange,提问作者Orwa Ra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:21:07