文章详情
FLutter调用android原生api打开手机电池优化【Kotlin】
Posted on 2025-05-01 21:58:10 by 主打一个C++
AndroidManifest.xml添加权限
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
MainActivity.kt添加代码
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.PowerManager
import android.provider.Settings
import android.widget.Toast
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
class MainActivity : FlutterActivity() {
// 电池优化
companion object {
private const val CHANNEL_BATTERY_OPTIMIZATION = "com.test.app/battery_optimization"
}
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
// 注册电池优化通道
setupBatteryOptimizationChannel(flutterEngine)
}
// ****************************************** 禁用、打开、查询电池优化
private fun isBatteryOptimizationEnabled(): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val powerManager = getSystemService(POWER_SERVICE) as PowerManager
// 返回 true 表示当前处于"被电池优化"状态
return !powerManager.isIgnoringBatteryOptimizations(packageName)
}
return false // 低于 M 版本不支持此功能,默认不启用
}
private fun requestDisableBatteryOptimization(): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
val intent = Intent().apply {
action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
data = Uri.parse("package:$packageName")
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
startActivity(intent)
return true
} catch (e: Exception) {
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 fun openBatteryOptimizationSettings() {
val intent = Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
startActivity(intent)
}
private fun setupBatteryOptimizationChannel(@NonNull flutterEngine: FlutterEngine) {
MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
CHANNEL_BATTERY_OPTIMIZATION
).setMethodCallHandler { call, result ->
when (call.method) {
"openBatteryOptimizationSettings" -> {
openBatteryOptimizationSettings()
result.success(null)
}
"isBatteryOptimizationEnabled" -> result.success(isBatteryOptimizationEnabled())
"requestDisableBatteryOptimization" -> result.success(
requestDisableBatteryOptimization()
)
else -> result.notImplemented()
}
}
}
}
flutter调用代码
static final platform = MethodChannel('com.vpn.app/battery_optimization');
static Future<void> openBatteryOptimizationSettings() async {
try {
await platform.invokeMethod('openBatteryOptimizationSettings');
} on PlatformException catch (e) {
print("Failed to open battery optimization settings: ${e.message}");
}
}
//正在被优化返回true
static Future<bool?> isBatteryOptimizationEnabled() async {
return await platform.invokeMethod<bool>('isBatteryOptimizationEnabled') ?? true;
}
static Future<bool?> requestDisableBatteryOptimization() async {
return await platform.invokeMethod('requestDisableBatteryOptimization');
}
*转载请注明出处:原文链接:https://cpp.vin/page/148.html