翩翩。如何安排通知的时间?

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

我试图用以下方法实现每天的通知调度。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个回答
0
投票

可能有几个原因导致这个问题。

  1. 你指定的图标名称(app_icon)可能和你在 "通知 "中提供的图标名称不一样。@drawable 文件夹,甚至不存在。

  2. 你必须在以下两行中添加 Manifest.

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

你需要在 <activity> 标签关闭。你的清单应该是这样的。

<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>

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