在颤振中如何清除栏中的通知?
Posted
技术标签:
【中文标题】在颤振中如何清除栏中的通知?【英文标题】:In flutter how to clear notification in bar? 【发布时间】:2020-12-06 05:10:39 【问题描述】:我正在学习 Google 云消息传递,firebase messaging 工作正常,但是当用户不单击通知打开应用程序而是通过手动打开应用程序并将其置于前台直接进入应用程序时,通知会保留。当应用程序进入前台时,我希望那些与我的应用程序相关的通知消息消失。我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:它认为documentation没有办法做到这一点。
但是你可以试试这个。你可以去你的 android 文件夹中的 MainActivity.java, 并做这样的事情。
import android.app.NotificationManager;
import android.content.Context;
导入这些包。
@Override
protected void onResume()
super.onResume();
// Removing All Notifications
closeAllNotifications();
private void closeAllNotifications()
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();
在 MainActivity.java 的 onCreate
下方添加一个 onResume
函数。
希望这能解决您的问题。
【讨论】:
【参考方案2】:Shri Hari 解决方案成功了。 科特林:
import android.app.NotificationManager
import android.content.Context
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity()
override fun onResume()
super.onResume()
closeAllNotifications();
private fun closeAllNotifications()
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.cancelAll()
对于 ios,我使用 UNUserNotificationCenter:
import UIKit
import Flutter
import UserNotifications
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool
GeneratedPluginRegistrant.register(with: self)
if #available(iOS 10.0, *)
application.applicationIconBadgeNumber = 0 // For Clear Badge Counts
let center = UNUserNotificationCenter.current()
center.removeAllDeliveredNotifications() // To remove all delivered notifications
center.removeAllPendingNotificationRequests()
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
【讨论】:
如何在flutter 2.0中做到这一点?你能帮帮我吗? @JasminSojitra 我猜它适用于 Flutter 2。* 这在 Flutter 2.0 中也适用于我【参考方案3】:如果您不想修改您的 swift 或 java 代码,您可以使用 flutter_local_notifications
,它提供了一个方法 cancelAll()
。
class SomeWidget extends State<SomeState> with WidgetsBindingObserver
@override
void didChangeAppLifecycleState(AppLifecycleState state) async
if (state == AppLifecycleState.resumed)
await flutterLocalNotificationsPlugin
.cancelAll();
【讨论】:
【参考方案4】:清除/取消应用加载和恢复通知
iOS AppDelegate
将您的ios/Runner/AppDelegate.swift
替换为以下内容。
只需确保您的应用所需的任何代码也存在(例如 Firebase 和 FirebaseApp.configure() 的导入)。
import UIKit
import Flutter
import UserNotifications
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool
if #available(iOS 10.0, *)
clearAllNotifications(application)
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
override func applicationDidBecomeActive(_ application: UIApplication)
super.applicationDidBecomeActive(application)
clearAllNotifications(application)
func clearAllNotifications(_ application: UIApplication)
application.applicationIconBadgeNumber = 0 // Clear Badge Counts
let center: UNUserNotificationCenter = UNUserNotificationCenter.current()
center.removeAllDeliveredNotifications()
center.removeAllPendingNotificationRequests()
Android MainActivity
>注意:删除示例中的所有 <
和 >
并改用您的值。
将您的android/app/src/main/kotlin/com/<your_domain>/<your_app_name>/MainActivity.kt
替换为以下内容。
package com.<your_domain>.<your_app_name>
import android.app.NotificationManager
import android.content.Context
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity()
override fun onResume()
super.onResume()
closeAllNotifications();
private fun closeAllNotifications()
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.cancelAll()
【讨论】:
以上是关于在颤振中如何清除栏中的通知?的主要内容,如果未能解决你的问题,请参考以下文章
使颤动通知(通过firebase)弹出到前台(并且不仅仅是状态栏中的图标)