在颤振中如何清除栏中的通知?

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

​​>

注意:删除示例中的所有 &lt;&gt; 并改用您的值。

将您的android/app/src/main/kotlin/com/&lt;your_domain&gt;/&lt;your_app_name&gt;/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)弹出到前台(并且不仅仅是状态栏中的图标)

如何在颤振中实现推送通知

当请求视频和音频通话时,我如何接收全屏通知,例如颤振中的 Facebook Messenger

如何使用 FCM 在颤振中推送通知

如何清除iphone通知栏中的所有通知