【问题标题】:Flutter: How to schedule notifications?Flutter:如何安排通知?
【发布时间】:2020-05-05 17:50:30
【问题描述】:

我试图使用flutter_local_notification 包实现通知的每日调度,但我的代码不起作用。 代码:

void dailyNotification() async {
    var android = new AndroidInitializationSettings('app_icon');
    var iOS = new IOSInitializationSettings();
    var initializationSettings = new InitializationSettings(android, iOS);
    bool response = await _flutterLocalNotificationsPlugin.initialize(initializationSettings);
    if(response == true){
      print("inside notification");
      var time = Time(23, 7, 0);
      var androidPlatformChannelSpecifics = AndroidNotificationDetails(
          'repeatDailyAtTime channel id',
          'repeatDailyAtTime channel name',
          'repeatDailyAtTime description');
      var iOSPlatformChannelSpecifics = IOSNotificationDetails();
      var platformChannelSpecifics = NotificationDetails(
          androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
      await _flutterLocalNotificationsPlugin.showDailyAtTime(
        0,
        'Hello',
        'All the best!',
        time,
        platformChannelSpecifics
      );
    }
  }

我在initState 中调用了这个函数,但仍然没有出现通知。打印语句正在工作。而且我还在我的 AndroidManifest.xml 文件中添加了这些权限:

    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />

我怎样才能做到这一点?

【问题讨论】:

    标签: android flutter dart push-notification localnotification


    【解决方案1】:

    可能有几个原因导致此问题:

    1. 您指定的图标名称 (app_icon) 可能与您在 @drawable 文件夹中提供的图标名称不同,甚至不存在。

    2. 您还必须在Manifest 中添加这两行。

      <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
      <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
      

    您需要在&lt;activity&gt; 标签关闭后添加它们。你的清单应该是这样的:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your_package_name">
    <!-- 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.INTERNET"/>-->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.VIBRATE" />
    <!--    <uses-permission android:name="android.permission.WAKE_LOCK" />-->
    
    
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="Application_Name"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
    
            <meta-data
                android:name="io.flutter.embedding.android.SplashScreenDrawable"
                android:resource="@mipmap/launch_screen"
                />
    
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    
    
        <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>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java-->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
    

    【讨论】:

    • 我认为您还必须更改接收者的com.dexterous.flutterlocalnotifications
    • @tahesse 谢谢。好吧,自从我添加答案后,即使在语法上,包也有很多重大变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2020-05-22
    相关资源
    最近更新 更多