L o a d i n g . . .
主打一个C++
文章详情

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

作者近期文章
提示
×
确定
数据库执行: 7次 总耗时: 0.01s
页面加载耗时: 



wechat +447752296473
wechat cpp-blog