mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-04-20 22:13:48 +00:00
74 lines
2.1 KiB
Dart
74 lines
2.1 KiB
Dart
import '../utils/platform_info.dart';
|
|
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
|
|
|
|
class BackgroundService {
|
|
bool _initialized = false;
|
|
|
|
Future<void> initialize() async {
|
|
if (!PlatformInfo.isAndroid || _initialized) return;
|
|
FlutterForegroundTask.init(
|
|
androidNotificationOptions: AndroidNotificationOptions(
|
|
channelId: 'meshcore_background',
|
|
channelName: 'MeshCore Background',
|
|
channelDescription: 'Keeps MeshCore running in the background.',
|
|
channelImportance: NotificationChannelImportance.LOW,
|
|
priority: NotificationPriority.LOW,
|
|
),
|
|
iosNotificationOptions: const IOSNotificationOptions(
|
|
showNotification: false,
|
|
playSound: false,
|
|
),
|
|
foregroundTaskOptions: ForegroundTaskOptions(
|
|
eventAction: ForegroundTaskEventAction.repeat(5000),
|
|
autoRunOnBoot: false,
|
|
allowWifiLock: false,
|
|
),
|
|
);
|
|
_initialized = true;
|
|
}
|
|
|
|
Future<void> start() async {
|
|
if (!PlatformInfo.isAndroid) return;
|
|
if (!_initialized) {
|
|
await initialize();
|
|
}
|
|
final running = await FlutterForegroundTask.isRunningService;
|
|
if (running) return;
|
|
await FlutterForegroundTask.startService(
|
|
notificationTitle: 'MeshCore running',
|
|
notificationText: 'Keeping BLE connected',
|
|
callback: startCallback,
|
|
);
|
|
}
|
|
|
|
Future<void> stop() async {
|
|
if (!PlatformInfo.isAndroid) return;
|
|
final running = await FlutterForegroundTask.isRunningService;
|
|
if (!running) return;
|
|
await FlutterForegroundTask.stopService();
|
|
}
|
|
}
|
|
|
|
@pragma('vm:entry-point')
|
|
void startCallback() {
|
|
FlutterForegroundTask.setTaskHandler(_MeshCoreTaskHandler());
|
|
}
|
|
|
|
class _MeshCoreTaskHandler extends TaskHandler {
|
|
@override
|
|
Future<void> onStart(DateTime timestamp, TaskStarter starter) async {}
|
|
|
|
@override
|
|
void onRepeatEvent(DateTime timestamp) {}
|
|
|
|
@override
|
|
Future<void> onDestroy(DateTime timestamp, bool isTimeout) async {}
|
|
|
|
@override
|
|
void onNotificationButtonPressed(String id) {}
|
|
|
|
@override
|
|
void onNotificationPressed() {
|
|
FlutterForegroundTask.launchApp('/');
|
|
}
|
|
}
|