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

Flutter中如何检测应用是否被加入Android省电/超级省电模式?

解决方案:Flutter检测国内ROM省电/超级省电模式

针对国内ROM定制化的省电机制,通用插件往往无法完全适配,推荐以下两种可靠方案:

一、通过MethodChannel调用原生API(最稳定)

直接针对不同Android ROM编写原生检测逻辑,通过Flutter平台通道返回结果,适配性最强:

Android原生实现示例

  1. 检测普通省电模式
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
val isPowerSaveMode = powerManager.isPowerSaveMode
  1. 检测各品牌超级省电模式
  • 小米/Redmi:
val contentResolver = contentResolver
val isUltraPowerSave = Settings.Global.getInt(contentResolver, "low_power", 0) == 1
  • 华为/荣耀:
val isUltraPowerSave = HwPowerManager.isUltraPowerSaveMode(applicationContext)
// 可通过反射调用避免依赖华为SDK
  • OPPO/Realme:
val isUltraPowerSave = Settings.Secure.getInt(contentResolver, "low_power_mode", 0) == 1
  • vivo/iQOO:
val isUltraPowerSave = Settings.Secure.getInt(contentResolver, "low_power_mode", 0) == 1

Flutter端调用示例

import 'package:flutter/services.dart';

class PowerSaveChecker {
  static const MethodChannel _channel = MethodChannel('power_save_checker');

  static Future<bool> isInPowerSaveMode() async {
    try {
      return await _channel.invokeMethod('isInPowerSaveMode') ?? false;
    } on PlatformException catch (e) {
      print("检测普通省电模式失败: ${e.message}");
      return false;
    }
  }

  static Future<bool> isInUltraPowerSaveMode() async {
    try {
      return await _channel.invokeMethod('isInUltraPowerSaveMode') ?? false;
    } on PlatformException catch (e) {
      print("检测超级省电模式失败: ${e.message}");
      return false;
    }
  }
}

二、适配国内ROM的插件尝试

如果不想编写原生代码,可结合以下插件实现:

  • battery_plus:可检测标准Android省电模式,超级省电模式需配合设备品牌信息补充判断逻辑
  • device_info_plus:获取设备品牌标识,用于匹配对应ROM的超级省电检测规则

注意事项

  1. 部分ROM的超级省电模式检测需额外权限,需在AndroidManifest.xml中添加(如小米的android.permission.READ_SETTINGS)
  2. 国内ROM更新频繁,需定期验证检测逻辑的有效性
  3. 检测到省电模式后,可通过原生代码引导用户跳转至对应ROM的电池优化设置页面,方便用户操作

内容的提问来源于stack exchange,提问作者Ash XD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:40:26