You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何启动各安卓厂商电源管理器并获取对应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

火山引擎 最新活动