You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何实现应用关闭时仍在通知栏展示不可清除的常驻通知

Flutter 实现常驻不可清除通知栏通知方案

注意:该功能在不同操作系统上的实现限制差异较大,部分高版本系统可能有额外的权限管控要求

1 前置说明

  • 只有Android平台支持「应用关闭后仍保留不可清除的常驻通知」的需求,iOS受系统沙盒机制限制,最多只能实现应用运行时的不可清除通知,应用退出后通知会被系统自动回收
  • Android 8.0及以上版本中,常驻通知必须绑定前台服务实现,单独发送普通通知无法达成永久不被清除的效果

2 Android端实现步骤

2.1 引入依赖

推荐使用flutter_local_notifications插件完成能力封装,首先在pubspec.yaml中添加依赖:

dependencies:
  flutter_local_notifications: ^16.1.0
  # 可选:用于申请通知权限
  permission_handler: ^11.0.1

2.2 配置Android清单文件

在android/app/src/main/AndroidManifest.xml中添加对应权限和服务声明:

<!-- 前台服务基础权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Android 12+ 前台服务类型声明权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<!-- Android 13+ 通知发送权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<application ...>
    <!-- 绑定常驻通知的前台服务配置 -->
    <service
        android:name="io.flutter.plugins.flutterlocalnotifications.ForegroundService"
        android:foregroundServiceType="specialUse"
        android:exported="false"/>
</application>

2.3 核心实现代码

启动常驻通知的示例代码如下:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:permission_handler/permission_handler.dart';

final FlutterLocalNotificationsPlugin notificationsPlugin = FlutterLocalNotificationsPlugin();

Future<void> startPersistentNotification() async {
  // 先申请通知权限
  if (await Permission.notification.isDenied) {
    await Permission.notification.request();
  }

  // 初始化通知配置
  const AndroidInitializationSettings initAndroid = AndroidInitializationSettings('@mipmap/ic_launcher');
  const InitializationSettings initSettings = InitializationSettings(android: initAndroid);
  await notificationsPlugin.initialize(initSettings);

  // 配置通知核心参数
  const AndroidNotificationDetails androidConfig = AndroidNotificationDetails(
    'persistent_channel_001', // 自定义通知渠道ID
    '常驻通知', // 通知渠道名称
    channelDescription: '应用常驻运行提示',
    importance: Importance.low,
    priority: Priority.low,
    // 核心配置:标记为常驻不可清除
    ongoing: true,
    autoCancel: false,
    showWhen: false,
  );

  const NotificationDetails notificationConfig = NotificationDetails(android: androidConfig);

  // 启动前台服务绑定通知,固定通知ID为1即可
  await notificationsPlugin.startForegroundService(
    1,
    '应用后台运行中',
    '点击返回应用',
    notificationDetails: notificationConfig,
  );
}

// 停止常驻通知调用的方法
Future<void> stopPersistentNotification() async {
  await notificationsPlugin.stopForegroundService();
  await notificationsPlugin.cancel(1);
}
  • 核心参数ongoing: true会标记通知为常驻状态,用户无法手动滑动清除
  • 绑定前台服务后,通知会和服务生命周期绑定,即使应用被用户手动滑除后台,服务仍然会存活,通知也会持续展示

3 iOS端限制说明

iOS系统本身不支持完全不可清除的常驻通知,也不支持应用退出后保留通知,仅可配置应用运行时的通知不被自动清除,应用退出、系统重启、用户手动清理通知都会让通知消失。

内容的提问来源于stack exchange,提问作者user14485337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:27:02