본문 바로가기
Flutter/Package

플러터에서 foreground Service 구현하기: flutter_foreground_task 사용법

by Maccrey Coding 2025. 2. 14.
반응형

Flutter에서 foreground service를 구현하는 방법에 대해 궁금하시다면, 이번 글을 주목해 주세요.

우리가 다룰 내용은 flutter_foreground_task 패키지를 사용하여 foreground service를 구현하는 방법입니다.

이 글에서는 초보자도 쉽게 따라할 수 있도록 옵션 설정과 함께 step-by-step으로 설명할 예정입니다.

 

foreground service란 앱이 백그라운드에서 실행되고 있더라도 시스템 UI에 표시되며, 앱이 종료되지 않도록 하는 서비스를 의미합니다.

예를 들어, GPS 위치 추적, 음악 플레이어, 다운로드 등과 같은 작업을 앱이 백그라운드에서 처리할 수 있게 해줍니다.

1. flutter_foreground_task 패키지 설치하기

flutter_foreground_task는 Flutter에서 foreground service를 구현할 수 있도록 도와주는 패키지입니다.

이 패키지를 사용하면 앱이 백그라운드에서 실행되더라도 계속해서 실행될 수 있도록 도와줍니다.

먼저, pubspec.yaml 파일에 해당 패키지를 추가해 줍니다.

dependencies:
  flutter:
    sdk: flutter
  flutter_foreground_task: ^1.0.0

터미널에서 flutter pub get 명령어를 실행하여 패키지를 설치해 주세요.

2. AndroidManifest.xml 설정

foreground service를 사용하려면 AndroidManifest.xml 파일에 몇 가지 권한을 추가해야 합니다.

먼저, AndroidManifest.xml을 열고 아래와 같이 필요한 권한을 추가해 주세요.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

이 권한은 안드로이드에서 foreground service를 사용할 수 있도록 허용하는 권한입니다.

3. FlutterForegroundTask 설정하기

이제 Flutter에서 foreground service를 설정해 보겠습니다. 먼저, Flutter 앱을 실행할 때 foreground service를 시작할 수 있도록 설정해야 합니다.

이를 위해 Flutter에서 foreground service를 시작하는 코드를 작성합니다.

Main.dart 파일에서 구현

import 'package:flutter/material.dart';
import 'package:flutter_foreground_task/flutter_foreground_task.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ForegroundTaskPage(),
    );
  }
}

class ForegroundTaskPage extends StatefulWidget {
  @override
  _ForegroundTaskPageState createState() => _ForegroundTaskPageState();
}

class _ForegroundTaskPageState extends State<ForegroundTaskPage> {
  @override
  void initState() {
    super.initState();
    _startForegroundTask();
  }

  // Foreground Task 시작
  void _startForegroundTask() async {
    bool isRunning = await FlutterForegroundTask.isRunningService;
    if (!isRunning) {
      await FlutterForegroundTask.start(
        notificationTitle: 'Foreground Service',
        notificationText: '서비스가 실행 중입니다...',
        callback: _backgroundTask,  // 백그라운드 작업
      );
    }
  }

  // 백그라운드 작업
  void _backgroundTask() {
    // 백그라운드에서 실행할 작업을 여기에 추가
    FlutterForegroundTask.updateNotification(
      notificationTitle: '실행 중',
      notificationText: '백그라운드에서 작업이 진행되고 있습니다...',
    );
  }

  // Foreground Task 종료
  void _stopForegroundTask() async {
    await FlutterForegroundTask.stop();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Foreground Service")),
      body: Center(
        child: ElevatedButton(
          onPressed: _stopForegroundTask,
          child: Text("Foreground Service 종료"),
        ),
      ),
    );
  }
}

코드 설명

  1. FlutterForegroundTask.start(): 이 메서드는 foreground service를 시작합니다. notificationTitle과 notificationText는 시스템 알림을 설정하는 데 사용됩니다. 여기서 callback 매개변수는 백그라운드에서 실행될 작업을 설정하는 데 사용됩니다.
  2. FlutterForegroundTask.updateNotification(): 백그라운드에서 실행 중인 동안 알림을 업데이트합니다. notificationTitle과 notificationText를 변경하여 현재 상태를 표시할 수 있습니다.
  3. FlutterForegroundTask.stop(): foreground service를 종료하는 메서드입니다. 이 메서드를 호출하면 서비스를 종료하고 알림을 제거합니다.

4. FlutterForegroundTask 옵션

flutter_foreground_task에서 제공하는 몇 가지 주요 옵션은 다음과 같습니다.

  • notificationTitle: foreground service를 시작할 때 표시되는 알림의 제목을 설정합니다.
  • notificationText: 알림의 본문을 설정합니다.
  • callback: 백그라운드에서 수행할 작업을 정의합니다. 이 함수는 서비스가 실행되는 동안 계속해서 호출됩니다.
  • updateNotification(): 백그라운드 작업이 진행되는 동안 알림을 업데이트할 수 있습니다.

5. 서비스가 실행 중인지 확인하기

Foreground task가 실행되고 있는지 확인하려면 다음 코드를 사용하여 상태를 체크할 수 있습니다.

bool isRunning = await FlutterForegroundTask.isRunningService;

이 코드로 foreground service가 실행 중인지 확인하고, 필요에 따라 서비스를 시작하거나 종료할 수 있습니다.

6. 앱 종료 후 서비스 유지하기

앱이 종료된 후에도 foreground service가 계속 실행되게 하려면, flutter_foreground_task 패키지를 사용하는 것 외에도 앱 종료 후 재시작과 같은 추가적인 설정이 필요할 수 있습니다.

안드로이드에서는 WorkManager와 같은 다른 패키지와의 조합을 고려할 수 있습니다.

 

이 글에서는 Flutter에서 flutter_foreground_task 패키지를 사용하여 foreground service를 구현하는 방법을 설명했습니다.

초보자도 쉽게 따라할 수 있도록 각 옵션과 기능을 상세히 다루었습니다.

이 방법을 사용하면 GPS 추적, 음악 플레이어 등의 작업을 백그라운드에서 계속 실행할 수 있습니다.

 

앞으로 Flutter로 앱을 개발하면서 foreground service가 필요한 경우, 이 패키지를 활용해 보세요.

구독!! 공감과 댓글,

광고 클릭은 저에게 큰 힘이 됩니다.

 

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

반응형