如何启动各安卓厂商电源管理器并获取对应Intent以保障推送功能?
安卓各厂商电源管理后台权限开启指南(含Intent跳转方案)
作为安卓开发者,肯定遇到过推送通知莫名失效的情况——十有八九是厂商定制的电源管理机制掐断了应用后台。下面整理了主流厂商的手动开启步骤,以及对应的Intent跳转代码,能帮你快速引导用户完成配置,不用让他们自己瞎找设置:
一、手动开启各厂商后台运行权限步骤
- 华为(仅EMUI 5.0/Android 7及之前):进入设置 > “受保护应用”,勾选目标应用。
- 索尼:点击电池图标,进入电源管理 > STAMINA模式 > 待机活动应用 > 添加目标应用。
- 华硕:在Auto-start Manager中勾选目标应用。
- 小米:
- 旧版:打开Security应用 > 权限 > 自启动 - 启用目标应用
- 新版:进入设置 > 开发者选项,关闭“内存优化”。(开启开发者选项:设置 > 关于手机,连续点击MIUI版本8次)
- OPPO:进入设置 > “安全设置” > “数据保护”,启用目标应用。
- 三星:关闭电池使用优化。
二、Intent跳转代码实现(直接打开对应设置页面)
如果你想在应用内直接引导用户跳转到对应的设置页面,以下是各厂商的Intent配置:
已验证的华为、小米Intent代码
// 华为受保护应用页面Intent Intent INTENT_HUAWEI = new Intent().setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")); // 小米自启动管理页面Intent Intent INTENT_XIAOMI = new Intent().setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); // 判断设备是否支持并跳转 if (getPackageManager().resolveActivity(INTENT_HUAWEI, PackageManager.MATCH_DEFAULT_ONLY) != null) { startActivity(INTENT_HUAWEI); } else if (getPackageManager().resolveActivity(INTENT_XIAOMI, PackageManager.MATCH_DEFAULT_ONLY) != null) { startActivity(INTENT_XIAOMI); }
其他厂商补充Intent代码
索尼
// 索尼CTA权限管理主页面 Intent INTENT_SONY = new Intent().setComponent(new ComponentName("com.sonymobile.cta", "com.sonymobile.cta.SomcCTAMainActivity")); // 直接跳转至STAMINA模式设置页面 Intent INTENT_SONY_STAMINA = new Intent().setComponent(new ComponentName("com.sonymobile.powermanagement.extension", "com.sonymobile.powermanagement.extension.StaminaSettings"));
提示:部分索尼设备可能需要优先尝试第二个Intent,建议先判断第一个是否存在,再依次尝试第二个。
华硕
Intent INTENT_ASUS = new Intent().setComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity"));
OPPO
// 新版OPPO自启动管理页面 Intent INTENT_OPPO = new Intent(); INTENT_OPPO.setAction("com.coloros.safecenter.permission.startup"); INTENT_OPPO.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")); // 旧版OPPO自启动管理页面 Intent INTENT_OPPO_OLD = new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.startupapp.StartupAppListActivity"));
三星
// 跳转至系统电池优化设置主页面 Intent INTENT_SAMSUNG = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); // 直接跳转至当前应用的电池优化详情页(需声明权限) String packageName = getPackageName(); Intent INTENT_SAMSUNG_APP = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); INTENT_SAMSUNG_APP.setData(Uri.parse("package:" + packageName));
提示:使用第二个Intent需要在Manifest中添加权限
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />,并且跳转前最好先判断应用是否已经在忽略列表中。
通用注意事项
所有Intent使用前,都建议通过getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null判断当前设备是否支持该跳转,避免出现崩溃或无响应的情况。
内容的提问来源于stack exchange,提问作者Alessandro Scarozza




