我试图使用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" />
我该如何实现?
答案 0 :(得分:0)
可能有几件事导致此问题:
您指定的图标名称(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>