From a0287a9f36166cceae841b29ef759c9f353f39b9 Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Sun, 20 Aug 2023 21:34:32 +0800 Subject: [PATCH] #139 fix --- android/app/src/main/AndroidManifest.xml | 2 ++ .../tech/lolli/toolbox/KeepAliveService.kt | 18 ++++++++++++++++++ .../kotlin/tech/lolli/toolbox/MainActivity.kt | 18 +++++++++++++----- lib/main.dart | 8 +++++++- 4 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 android/app/src/main/kotlin/tech/lolli/toolbox/KeepAliveService.kt diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 92f90e3c..a034f105 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -55,5 +55,7 @@ android:name="android.appwidget.provider" android:resource="@xml/home_widget" /> + + diff --git a/android/app/src/main/kotlin/tech/lolli/toolbox/KeepAliveService.kt b/android/app/src/main/kotlin/tech/lolli/toolbox/KeepAliveService.kt new file mode 100644 index 00000000..75c1518d --- /dev/null +++ b/android/app/src/main/kotlin/tech/lolli/toolbox/KeepAliveService.kt @@ -0,0 +1,18 @@ +package tech.lolli.toolbox + +import android.app.Service +import android.content.Intent + +import android.os.IBinder +import org.jetbrains.annotations.Nullable + +class KeepAliveService : Service() { + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + return START_STICKY + } + + @Nullable + override fun onBind(intent: Intent?): IBinder? { + return null + } +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/tech/lolli/toolbox/MainActivity.kt b/android/app/src/main/kotlin/tech/lolli/toolbox/MainActivity.kt index b8dcfce2..8539a358 100644 --- a/android/app/src/main/kotlin/tech/lolli/toolbox/MainActivity.kt +++ b/android/app/src/main/kotlin/tech/lolli/toolbox/MainActivity.kt @@ -1,5 +1,6 @@ package tech.lolli.toolbox +import android.content.Intent import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel @@ -11,11 +12,18 @@ class MainActivity : FlutterActivity() { MethodChannel(binaryMessenger, "tech.lolli.toolbox/app_retain").apply { setMethodCallHandler { method, result -> - if (method.method == "sendToBackground") { - moveTaskToBack(true) - result.success(null) - } else { - result.notImplemented() + when (method.method) { + "sendToBackground" -> { + moveTaskToBack(true) + result.success(null) + } + "startService" -> { + val intent = Intent(this@MainActivity, KeepAliveService::class.java) + startService(intent) + } + else -> { + result.notImplemented() + } } } } diff --git a/lib/main.dart b/lib/main.dart index 8b7afaa5..20ad5634 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,6 +6,7 @@ import 'package:logging/logging.dart'; import 'package:macos_window_utils/window_manipulator.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:toolbox/data/res/misc.dart'; import 'package:toolbox/view/widget/custom_appbar.dart'; import 'app.dart'; @@ -92,8 +93,13 @@ Future initApp() async { final settings = locator(); loadFontFile(settings.fontPath.fetch()); - // SharedPreferences is only used on Android for saving home widgets settings. + // Android only if (!isAndroid) return; + // Only start service when [bgRun] is true. + if (locator().bgRun.fetch() ?? false) { + bgRunChannel.invokeMethod('startService'); + } + // SharedPreferences is only used on Android for saving home widgets settings. SharedPreferences.setPrefix(''); }