Flutter中如何检测应用是否被加入Android省电/超级省电模式?
解决方案:Flutter检测国内ROM省电/超级省电模式
针对国内ROM定制化的省电机制,通用插件往往无法完全适配,推荐以下两种可靠方案:
一、通过MethodChannel调用原生API(最稳定)
直接针对不同Android ROM编写原生检测逻辑,通过Flutter平台通道返回结果,适配性最强:
Android原生实现示例
- 检测普通省电模式
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager val isPowerSaveMode = powerManager.isPowerSaveMode
- 检测各品牌超级省电模式
- 小米/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的超级省电检测规则
注意事项
- 部分ROM的超级省电模式检测需额外权限,需在
AndroidManifest.xml中添加(如小米的android.permission.READ_SETTINGS) - 国内ROM更新频繁,需定期验证检测逻辑的有效性
- 检测到省电模式后,可通过原生代码引导用户跳转至对应ROM的电池优化设置页面,方便用户操作
内容的提问来源于stack exchange,提问作者Ash XD
相关产品推荐
相关产品推荐

