added foreground service
parent
0779955ef0
commit
675441894a
@ -1,5 +1,27 @@
|
|||||||
package com.example.hmg_qline.hmg_qline
|
package com.example.hmg_qline.hmg_qline
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
import io.flutter.embedding.engine.FlutterEngine
|
||||||
|
import io.flutter.plugin.common.MethodChannel
|
||||||
|
|
||||||
class MainActivity : FlutterActivity() {}
|
class MainActivity : FlutterActivity() {
|
||||||
|
private val CHANNEL = "com.example.hmg_qline/foreground"
|
||||||
|
|
||||||
|
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||||
|
super.configureFlutterEngine(flutterEngine)
|
||||||
|
|
||||||
|
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler {
|
||||||
|
call, _ ->
|
||||||
|
Log.d("MainActivity", "MethodChannel call received: ${call.method}")
|
||||||
|
if (call.method == "reopenApp") {
|
||||||
|
Log.d("MainActivity", "reopenApp called, launching MainActivity")
|
||||||
|
val intent = Intent(this, MainActivity::class.java)
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -0,0 +1,22 @@
|
|||||||
|
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
|
||||||
|
|
||||||
|
void startCallback() {
|
||||||
|
FlutterForegroundTask.setTaskHandler(MyTaskHandler());
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyTaskHandler extends TaskHandler {
|
||||||
|
@override
|
||||||
|
Future<void> onStart(DateTime timestamp, TaskStarter? starter) async {
|
||||||
|
// Initialization code, e.g. open DB or services
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> onDestroy(DateTime timestamp, bool isTimeout) async {
|
||||||
|
// Clean up if needed
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onRepeatEvent(DateTime timestamp) {
|
||||||
|
// Called based on the eventAction set in ForegroundTaskOptions
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:hmg_qline/config/dependency_injection.dart';
|
||||||
|
import 'package:hmg_qline/services/logger_service.dart';
|
||||||
|
import 'package:hmg_qline/utilities/enums.dart';
|
||||||
|
|
||||||
|
class LifecycleHandler extends WidgetsBindingObserver {
|
||||||
|
final void Function()? onResumed;
|
||||||
|
final void Function()? onPaused;
|
||||||
|
final void Function()? onDetached;
|
||||||
|
final void Function()? onInactive;
|
||||||
|
final void Function()? onHidden;
|
||||||
|
|
||||||
|
LifecycleHandler({
|
||||||
|
this.onResumed,
|
||||||
|
this.onPaused,
|
||||||
|
this.onDetached,
|
||||||
|
this.onInactive,
|
||||||
|
this.onHidden,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||||
|
LoggerService loggerService = getIt.get<LoggerService>();
|
||||||
|
loggerService.logInfo("[didChangeAppLifecycleState] : ${state.toString()}");
|
||||||
|
switch (state) {
|
||||||
|
case AppLifecycleState.resumed:
|
||||||
|
onResumed?.call();
|
||||||
|
break;
|
||||||
|
case AppLifecycleState.paused:
|
||||||
|
onPaused?.call();
|
||||||
|
break;
|
||||||
|
case AppLifecycleState.inactive:
|
||||||
|
onInactive?.call();
|
||||||
|
break;
|
||||||
|
case AppLifecycleState.detached:
|
||||||
|
onDetached?.call();
|
||||||
|
break;
|
||||||
|
case AppLifecycleState.hidden:
|
||||||
|
onHidden?.call();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void register() {
|
||||||
|
WidgetsBinding.instance.addObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void unregister() {
|
||||||
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:hmg_qline/constants/app_constants.dart';
|
||||||
|
import 'package:hmg_qline/services/logger_service.dart';
|
||||||
|
import 'package:hmg_qline/utilities/enums.dart';
|
||||||
|
import 'package:restart_app/restart_app.dart';
|
||||||
|
|
||||||
|
abstract class NativeMethodChannelService {
|
||||||
|
void reopenApp();
|
||||||
|
|
||||||
|
void restartApp();
|
||||||
|
}
|
||||||
|
|
||||||
|
class NativeMethodChannelServiceImp implements NativeMethodChannelService {
|
||||||
|
MethodChannel platform;
|
||||||
|
LoggerService loggerService;
|
||||||
|
|
||||||
|
NativeMethodChannelServiceImp({required this.platform, required this.loggerService});
|
||||||
|
|
||||||
|
@override
|
||||||
|
void reopenApp() async {
|
||||||
|
try {
|
||||||
|
await platform.invokeMethod(AppStrings.openAppNativeFunctionName);
|
||||||
|
} catch (e) {
|
||||||
|
loggerService.logError("Error launching app: $e");
|
||||||
|
loggerService.logToFile("Error launching app: $e", type: LogTypeEnum.error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void restartApp() async {
|
||||||
|
try {
|
||||||
|
await Restart.restartApp();
|
||||||
|
} catch (e) {
|
||||||
|
loggerService.logError("Error restarting App : $e");
|
||||||
|
loggerService.logToFile("Error restarting App : $e", type: LogTypeEnum.error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue