diff --git a/lib/main.dart b/lib/main.dart index fc2149ded..44bb1dcd6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,6 +16,7 @@ import 'package:pilipala/pages/search/index.dart'; import 'package:pilipala/pages/video/detail/index.dart'; import 'package:pilipala/router/app_pages.dart'; import 'package:pilipala/pages/main/view.dart'; +import 'package:pilipala/services/disable_battery_opt.dart'; import 'package:pilipala/services/service_locator.dart'; import 'package:pilipala/utils/app_scheme.dart'; import 'package:pilipala/utils/data.dart'; @@ -71,6 +72,7 @@ void main() async { )); Data.init(); PiliSchame.init(); + DisableBatteryOpt(); }); } diff --git a/lib/services/disable_battery_opt.dart b/lib/services/disable_battery_opt.dart new file mode 100644 index 000000000..ae0189775 --- /dev/null +++ b/lib/services/disable_battery_opt.dart @@ -0,0 +1,40 @@ +import 'dart:io'; + +import 'package:disable_battery_optimization/disable_battery_optimization.dart'; +import 'package:pilipala/utils/storage.dart'; + +void DisableBatteryOpt() async { + if (!Platform.isAndroid) { + return; + } + // 本地缓存中读取 是否禁用了电池优化 默认未禁用 + bool isDisableBatteryOptLocal = + GStrorage.localCache.get('isDisableBatteryOptLocal', defaultValue: false); + if (!isDisableBatteryOptLocal) { + final isBatteryOptimizationDisabled = + await DisableBatteryOptimization.isBatteryOptimizationDisabled; + if (isBatteryOptimizationDisabled == false) { + final hasDisabled = await DisableBatteryOptimization + .showDisableBatteryOptimizationSettings(); + // 设置为已禁用 + GStrorage.localCache.put('isDisableBatteryOptLocal', hasDisabled == true); + } + } + + bool isManufacturerBatteryOptimizationDisabled = GStrorage.localCache + .get('isManufacturerBatteryOptimizationDisabled', defaultValue: false); + if (!isManufacturerBatteryOptimizationDisabled) { + final isManBatteryOptimizationDisabled = await DisableBatteryOptimization + .isManufacturerBatteryOptimizationDisabled; + if (isManBatteryOptimizationDisabled == false) { + final hasDisabled = await DisableBatteryOptimization + .showDisableManufacturerBatteryOptimizationSettings( + "当前设备可能有额外的电池优化", + "按照步骤操作以禁用电池优化,以保证应用在后台正常运行", + ); + // 设置为已禁用 + GStrorage.localCache.put( + 'isManufacturerBatteryOptimizationDisabled', hasDisabled == true); + } + } +} diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 9f8e12f6d..a82972e05 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -172,6 +172,10 @@ class LocalCacheKey { // 代理host port systemProxyHost = 'systemProxyHost', systemProxyPort = 'systemProxyPort'; + + static const String isDisableBatteryOptLocal = 'isDisableBatteryOptLocal', + isManufacturerBatteryOptimizationDisabled = + 'isManufacturerBatteryOptimizationDisabled'; } class VideoBoxKey { diff --git a/pubspec.lock b/pubspec.lock index bfef5f266..8972ef459 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -393,6 +393,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.4.0" + disable_battery_optimization: + dependency: "direct main" + description: + name: disable_battery_optimization + sha256: "6b2ba802f984af141faf1b6b5fb956d5ef01f9cd555597c35b9cc335a03185ba" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.1" dismissible_page: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index a5d103f6e..5c25f0442 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -140,6 +140,8 @@ dependencies: catcher_2: ^1.1.0 logger: ^2.0.2+1 path: 1.8.3 + # 电池优化 + disable_battery_optimization: ^1.1.1 dev_dependencies: flutter_test: