文章详情
FLutter调用android原生api打开手机电池优化【进阶】
Posted on 2025-04-30 13:43:53 by 主打一个C++
//包含查询是否开启了电池优化,打开优化界面,尝试禁用(部分机型无效)
//java
//是否开启了电池优化
private boolean isBatteryOptimizationEnabled() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (powerManager != null) {
// 返回 true 表示当前处于“被电池优化”状态
return !powerManager.isIgnoringBatteryOptimizations(getPackageName());
}
return true; // PowerManager 为空时默认认为是启用优化
}
return false; // 低于 M 版本不支持此功能,默认不启用
}
private boolean requestDisableBatteryOptimization() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return true;
} catch (Exception e) {
Toast.makeText(this, "This operation is not supported on this device.", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "Battery optimization not supported on this Android version.", Toast.LENGTH_SHORT).show();
}
return false;
}
//打开电池优化设置界面
private void openBatteryOptimizationSettings() {
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
//请求关闭该App的电池优化(需要用户授权)
private void setupBatteryOptimizationChannel(@NonNull FlutterEngine flutterEngine) {
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL_BATTERY_OPTIMIZATION)
.setMethodCallHandler(
(call, result) -> {
switch (call.method) {
case "openBatteryOptimizationSettings":
openBatteryOptimizationSettings();
result.success(null);
break;
case "isBatteryOptimizationEnabled":
result.success(isBatteryOptimizationEnabled());
break;
case "requestDisableBatteryOptimization":
result.success(requestDisableBatteryOptimization());
break;
default:
result.notImplemented();
break;
}
}
);
}
//flutter声明块,可直接调用
import 'package:flutter/services.dart';
final platform = MethodChannel('com.myapp.app/battery_optimization');
Future<void> openBatteryOptimizationSettings() async {
try {
await platform.invokeMethod('openBatteryOptimizationSettings');
} on PlatformException catch (e) {
print("Failed to open battery optimization settings: ${e.message}");
}
}
Future<bool?> isBatteryOptimizationEnabled() async {
return await platform.invokeMethod<bool>('isBatteryOptimizationEnabled');
}
Future<void> requestDisableBatteryOptimization() async {
return await platform.invokeMethod('requestDisableBatteryOptimization');
}
*转载请注明出处:原文链接:https://cpp.vin/page/145.html