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('');
}