我试图用以下方法实现每天的通知调度。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" />
我怎么才能做到这一点?
可能有几个原因导致这个问题。
你指定的图标名称(app_icon)可能和你在 "通知 "中提供的图标名称不一样。@drawable
文件夹,甚至不存在。
你必须在以下两行中添加 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>