我是新手。 除非关闭应用程序,否则警报功能将起作用。 关闭应用程序后,Android警报管理器无法正常工作。 我已将所有标签放入AndroidManifest.xml中。 在回叫时已调用此_ringAlarm()方法。
Future<void> _ringAlarm() async {
NotificationManager n = new NotificationManager();
n.initNotificationManager();
n.showNotificationWithDefaultSound("Keep it,it's YOURS", widget.text.split("_")[1]);
//n.showNotificationWithAlarmSound();
//Working in Simulator but not in Device
//n._showNotificationCustomSound();
//FlutterRingtonePlayer.playAlarm();
FlutterRingtonePlayer.play(
android: AndroidSounds.alarm,
ios: IosSounds.glass,
looping: false, // Android only - API >= 28
volume: 1, // Android only - API >= 28
asAlarm: false, // Android only - all APIs
);
Future.delayed(const Duration(milliseconds: 4000), () {
FlutterRingtonePlayer.stop();
});
print(Const.todoTextList);
}
这是通知管理器类的实现
class NotificationManager
{
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
AndroidInitializationSettings initializationSettingsAndroid;
IOSInitializationSettings initializationSettingsIOS;
InitializationSettings initializationSettings;
void initNotificationManager()
{
initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher');
initializationSettingsIOS = new IOSInitializationSettings();
initializationSettings = new InitializationSettings(initializationSettingsAndroid, initializationSettingsIOS);
flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
void showNotificationWithDefaultSound(String title, String body)
{
var androidPlatformChannelSpecifics = new AndroidNotificationDetails('your channel id', 'your channel name', 'your channel description', importance: Importance.Max, priority: Priority.High);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
flutterLocalNotificationsPlugin.show(0, title, body, platformChannelSpecifics);
}
static const MethodChannel platform = MethodChannel('your channel name');
/* Future<void> showNotificationWithAlarmSound() async {
/// this calls a method over a platform channel implemented within the
/// example app to return the Uri for the default alarm sound and uses
/// as the notification sound
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
final String alarmUri = await platform.invokeMethod('getAlarmUri');
final UriAndroidNotificationSound uriSound =
//UriAndroidNotificationSound(AndroidSounds.alarm.toString());
UriAndroidNotificationSound(alarmUri);
final AndroidNotificationDetails androidPlatformChannelSpecifics =
AndroidNotificationDetails(
'uri channel id', 'your channel name', 'your channel description',
sound: uriSound,
styleInformation: const DefaultStyleInformation(true, true));
final NotificationDetails platformChannelSpecifics = NotificationDetails(androidPlatformChannelSpecifics,iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(
0, 'uri sound title', 'uri sound body', platformChannelSpecifics);
}*/
//For custom notification
Future<void> _showNotificationCustomSound() async {
const AndroidNotificationDetails androidPlatformChannelSpecifics =
AndroidNotificationDetails(
'your other channel id',
'your other channel name',
'your other channel description',
sound: RawResourceAndroidNotificationSound('easy_going'),
);
const IOSNotificationDetails iOSPlatformChannelSpecifics =
IOSNotificationDetails(sound: 'easy_going');
//const MacOSNotificationDetails macOSPlatformChannelSpecifics =
//MacOSNotificationDetails(sound: 'slow_spring_board.aiff');
const NotificationDetails platformChannelSpecifics = NotificationDetails(androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(
0,
'custom sound notification title',
'custom sound notification body',
platformChannelSpecifics);
}
}
如果我不关闭实际应用程序会很好,一旦关闭应用程序通知将不起作用。我无法在模拟器中重现此问题。如果我有任何建议如何在模拟器中重现此问题,也会对我有帮助。