Flutter前台服务管理插件flutter_foreground_service的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter Foreground Service

Flutter Foreground Service 插件允许您在Flutter应用程序中创建和管理前台服务。这对于需要持续运行并在后台执行任务的应用程序非常有用,例如位置跟踪、音乐播放等。以下是关于如何设置和使用此插件的详细说明。

Setup

Step 1

本插件默认期望您的应用图标命名为ic_launcher.png。如果您使用flutter_launcher_icons包生成新的启动图标,请确保将其命名为ic_launcher.png

Step 2

将插件添加到您的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  flutter_foreground_service: ^LATEST_VERSION_HERE

请用页面上提供的最新版本号替换LATEST_VERSION_HERE

Step 3

将包导入到您的项目中:

import 'package:flutter_foreground_service/foreground_service.dart';

Usage

通过以下代码行可以启动前台服务:

await ForegroundService().start();

要停止该服务,可以使用以下代码:

await ForegroundService().stop();

示例 Demo

下面是一个完整的示例Demo,演示了如何在Flutter应用程序中集成和使用flutter_foreground_service插件。

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

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

void startForegroundService() async {
  await ForegroundService().start();
  debugPrint("Started service");
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Foreground Service Example'),
        ),
        body: Center(
            child: Text('Foreground service example, check notification bar')),
      ),
    );
  }

  @override
  void dispose() {
    ForegroundService().stop();
    super.dispose();
  }
}

在这个例子中,我们首先启动了前台服务,然后构建了一个简单的UI。当用户关闭应用程序时,我们会停止前台服务以节省资源。

请注意,这只是一个基础示例,实际应用中可能还需要处理更多细节,如权限请求、服务生命周期管理等。


更多关于Flutter前台服务管理插件flutter_foreground_service的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter前台服务管理插件flutter_foreground_service的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_foreground_service插件来管理前台服务的示例代码。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加flutter_foreground_service依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_foreground_service: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 配置Android权限

android/app/src/main/AndroidManifest.xml中添加必要的权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

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

    <application
        ... >
        ...
    </application>
</manifest>

3. 编写Dart代码

接下来,在你的Flutter项目中编写Dart代码来启动和管理前台服务。

main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Foreground Service Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () => startForegroundService(),
                child: Text('Start Foreground Service'),
              ),
              ElevatedButton(
                onPressed: () => stopForegroundService(),
                child: Text('Stop Foreground Service'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void startForegroundService() async {
    try {
      // 配置前台服务
      var notification = FlutterForegroundServiceNotification(
        title: 'Foreground Service',
        content: 'This is a foreground service running in the background.',
        channelId: 'foreground_service_channel',
        importance: NotificationImportance.High,
        priority: NotificationPriority.High,
      );

      // 启动前台服务
      await FlutterForegroundService.start(
        config: FlutterForegroundServiceConfig(
          android: AndroidForegroundServiceConfig(
            notification: notification,
            autoStartOnBoot: true,
          ),
        ),
      );

      print('Foreground service started.');
    } catch (e) {
      print('Error starting foreground service: $e');
    }
  }

  void stopForegroundService() async {
    try {
      // 停止前台服务
      await FlutterForegroundService.stop();

      print('Foreground service stopped.');
    } catch (e) {
      print('Error stopping foreground service: $e');
    }
  }
}

Android Channel配置

你还需要在Android上配置通知渠道,以便前台服务可以正确显示通知。

android/app/src/main/kotlin/.../MainActivity.kt(或者MainActivity.java,如果你使用的是Java)中添加以下代码来创建通知渠道:

Kotlin:

package com.example.yourapp

import android.app.Application
import android.app.NotificationChannel
import android.app.NotificationManager
import android.os.Build

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channelId = "foreground_service_channel"
            val channelName = "Foreground Service Channel"
            val importance = NotificationManager.IMPORTANCE_HIGH
            val channel = NotificationChannel(channelId, channelName, importance).apply {
                description = "Channel for foreground service notifications"
            }
            val notificationManager: NotificationManager =
                getSystemService(NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(channel)
        }
    }
}

Java:

package com.example.yourapp;

import android.app.Application;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Build;

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String channelId = "foreground_service_channel";
            String channelName = "Foreground Service Channel";
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel channel = new NotificationChannel(channelId, channelName, importance)
                    .setDescription("Channel for foreground service notifications");
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }
    }
}

别忘了在AndroidManifest.xml中声明你的Application类:

<application
    android:name=".MyApp"
    ... >
    ...
</application>

4. 运行应用

现在你可以运行你的Flutter应用,并通过点击按钮来启动和停止前台服务。

这段代码展示了如何使用flutter_foreground_service插件来在Flutter应用中管理前台服务,包括启动和停止服务以及配置通知渠道。

回到顶部