未显示预定通知(Flutter_local_notifications)

问题描述 投票:0回答:4

我正在尝试使用包 flutter 区域设置通知

发送通知

如果我立即使用 .show() 显示通知,我可以看到通知,但当我尝试使用 .schedule() 安排时,它不会出现。我可以看到它是用await flutterLocalNotificationsPlugin.pendingNotificationRequests();安排的

我在一个新的 flutter 项目中尝试了相同的代码,它确实在那里工作,所以我必须在我的实际项目中做一些不同的事情,我只是不知道是什么。

我的清单如下所示:

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

    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.VIBRATE" />
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="bap_todo_flutter"
        android:icon="@mipmap/ic_launcher">
        <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
        <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- This keeps the window background of the activity showing
                 until Flutter renders its first frame. It can be removed if
                 there is no splash screen (such as the default splash screen
                 defined in @style/LaunchTheme). -->
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

我的状态是这样的:

FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
      new FlutterLocalNotificationsPlugin();

  @override
  void initState() {
    super.initState();
    var initializationSettingsAndroid =
        new AndroidInitializationSettings('@mipmap/ic_launcher');
    var initializationSettingsIOS = new IOSInitializationSettings();
    var initializationSettings = new InitializationSettings(
        initializationSettingsAndroid, initializationSettingsIOS);
    flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onSelectNotification: onSelectNotification);
   }

我正在使用一个简单的 RaisingButton 来安排通知:

RaisedButton(
  child: Text("notification"),
  onPressed: () async {
        var scheduledNotificationDateTime =
    new DateTime.now().add(new Duration(seconds: 2));
        var androidPlatformChannelSpecifics =
    new AndroidNotificationDetails('myalarmapplication.alarm',
       'Alarm Channel', 'Flutter Todo Alarm');
    var iOSPlatformChannelSpecifics =
       new IOSNotificationDetails();
    NotificationDetails platformChannelSpecifics =
       new NotificationDetails(androidPlatformChannelSpecifics,
          iOSPlatformChannelSpecifics);
    await flutterLocalNotificationsPlugin
      .schedule(
      1,
      'Alarm',
      'Alarm going off',
      scheduledNotificationDateTime,
      platformChannelSpecifics);
   },
),
push-notification flutter
4个回答
0
投票

我遇到了同样的问题,但在网上找不到解决方案,但是,后来我确实弄清楚了运行

flutter clean
然后
flutter run
为我解决了这个问题。

您必须从根本上清理您的构建并再次重建它。希望有效。


0
投票

如果您使用的是 iOS,则应将此行添加到

AppDelegate.m/AppDelegate.swift
 中的 
ios/Runner

if #available(iOS 10.0, *) {
  UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate
}

从文档中得到了这个解决方案


0
投票

添加此额外行
flutterLocalNotifications插件 .时间表(
...
...

androidAllowWhileIdle: true);


0
投票

现在有点晚了,但如果有人遇到此问题,则可能是权限问题。 您可以将以下行添加到 AndroidManifest.xml(您的项目 > Android > App > src > main > AndroidManifest.xml 文件中:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />

添加应用程序标签中的前几行。

如果问题仍然存在,您可以在标签内添加以下行:

<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
  <intent-filter>
      <action android:name="android.intent.action.BOOT_COMPLETED"/>
      <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
      <action android:name="android.intent.action.QUICKBOOT_POWERON" />
      <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
  </intent-filter>
</receiver>

所有这些都是参考官方文档: https://pub.dev/packages/flutter_local_notifications#scheduled-android-notifications

我希望有人能发现这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.