Flutter后台服务插件background_service_easy的使用

Flutter后台服务插件background_service_easy的使用

简介

background_service_easy 是一个用于管理 Flutter 应用程序后台服务的包。

开始使用

要使用此包,请在 pubspec.yaml 文件中添加 background_service_easy 作为依赖项:

dependencies:
  background_service_easy: ^1.0.0

配置

该包提供了不同的配置选项以支持 iOS 和 Android 平台。通过使用 flutter_background_serviceflutter_background_service_android 包进行配置。

iOS

  • 如果希望 iOS 执行 IosConfiguration.onBackground 回调,请启用 Xcode 中的 background_fetch 能力(可选)。
  • 对于 iOS 13 及以上版本(使用 BGTaskScheduler),请将以下内容插入到 ios/Runner/Info.plist 文件中:
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
    <string>dev.flutter.background.refresh</string>
</array>
  • 您也可以使用自己的自定义标识符。在 ios/Runner/AppDelegate.swift 文件中添加以下行:
import UIKit
import Flutter
import flutter_background_service_ios // 添加这一行

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    /// 添加这一行
    SwiftFlutterBackgroundServicePlugin.taskIdentifier = "your.custom.task.identifier"

    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

Android

  • 对于 Android,您可以通过 AndroidConfiguration 类进行配置。

使用

import 'package:background_service_easy/background_service_easy.dart';

void main() {
  // 构造函数自动设置为前台状态
  BackgroundService(
    onForeground: () {
      // 当服务设置为前台时的回调
    },
    onBackground: () {
      // 当服务设置为后台或应用关闭时的回调
    },
    onStop: () {
      // 当服务停止时的回调
    },
  );
}

void setToBackground() {
  BackgroundService.setToBackground(); // 默认情况下调用此方法,仅当设置为后台时才调用
}

void stop() {
  BackgroundService.stop(); // 调用此方法来停止运行的服务
}

函数

  • setToForeground():将服务设置为前台。
  • setToBackground():将服务设置为后台。
  • stop():停止服务。

示例

以下是一个完整的示例,演示如何使用 background_service_easy 包来管理 Flutter 应用程序中的后台服务:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化后台服务,初始化后无需手动设置为前台
    BackgroundService(
      onForeground: () {
        // 当服务设置为前台时的回调
      },
      onBackground: () {
        // 当服务设置为后台或应用关闭时的回调
      },
      onStop: () {
        // 当服务停止时的回调
      },
    );
  }

  [@override](/user/override)
  void dispose() {
    super.dispose();
    BackgroundService.setToBackground(); // 在销毁时将服务设置为后台
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('后台服务示例'),
      ),
      body: Center(
        child: Text('后台服务示例'),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用background_service_easy插件来实现后台服务的代码示例。这个插件允许你在Flutter应用中创建和管理后台服务。

首先,确保你已经在pubspec.yaml文件中添加了background_service_easy依赖:

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

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

接下来,你需要配置Android和iOS平台的相关权限和设置。这里主要展示Android的配置,iOS的配置类似,请参考插件的官方文档。

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" />

    <!-- 其他配置 -->

</manifest>

创建后台服务

在你的Flutter项目中,创建一个Dart文件来定义你的后台服务逻辑,例如background_service.dart

import 'package:background_service_easy/background_service_easy.dart';
import 'package:flutter/services.dart';

class MyBackgroundService extends BackgroundService {
  @override
  void onCreate() {
    super.onCreate();
    print("Background Service Created");
  }

  @override
  void onStartCommand(Intent? intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    print("Background Service Started with StartId: $startId");

    // 在这里执行你的后台任务
    _performBackgroundTask();
  }

  void _performBackgroundTask() async {
    // 模拟一个长时间运行的任务
    while (true) {
      print("Background Task Running");
      await Future.delayed(Duration(seconds: 5));
    }
  }

  @override
  int onBind(Intent? intent) {
    // 不需要绑定服务时返回0
    return 0;
  }

  @override
  void onDestroy() {
    super.onDestroy();
    print("Background Service Destroyed");
  }
}

注册和启动后台服务

在你的主应用代码中(例如main.dart),注册并启动这个后台服务:

import 'package:flutter/material.dart';
import 'package:background_service_easy/background_service_easy.dart';
import 'background_service.dart';

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

  // 注册并启动后台服务
  BackgroundServiceEasy.instance
    ..registerService(MyBackgroundService())
    ..startService();
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Background Service Demo'),
        ),
        body: Center(
          child: Text('Check the console for background service logs.'),
        ),
      ),
    );
  }
}

注意事项

  1. 权限处理:在实际应用中,你需要处理权限请求,确保应用有权限执行后台服务。
  2. 电池优化:后台服务可能会受到电池优化策略的影响,确保你的应用能够处理这些限制。
  3. 测试:在真机上进行测试,因为模拟器可能无法完全模拟后台服务的行为。

这个示例展示了如何使用background_service_easy插件在Flutter应用中创建和管理后台服务。根据你的需求,你可以进一步自定义和扩展这个示例。

回到顶部