为什么关闭应用程序后,Flatter Android Alarm Manager无法在设备中工作?

为什么关闭应用程序后,Flatter Android Alarm Manager无法在设备中工作?,android,flutter,alarmmanager,flutter-dependencies,Android,Flutter,Alarmmanager,Flutter Dependencies,我是个新手。 除非关闭应用程序,否则报警功能将正常工作。 关闭应用程序后,android alarm manager不工作。 我已将所有标记放在AndroidManifest.xml中。 回调时,已调用此_ringAlarm()方法 Future<void> _ringAlarm() async { NotificationManager n = new NotificationManager(); n.initNotificationManager(); n

我是个新手。 除非关闭应用程序,否则报警功能将正常工作。 关闭应用程序后,android alarm manager不工作。 我已将所有标记放在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);

}


Future\u ringAlarm()异步{
NotificationManager n=新建NotificationManager();
n、 initNotificationManager();
n、 showNotificationWithDefaultSound(“保留它,它是你的”,widget.text.split(“”)[1]);
//n、 使用AlarmSound()显示通知;
//在模拟器中工作,但不在设备中工作
//n、 _showNotificationCustomSound();
//flatterringtoneplayer.playarm();
播放(
android:AndroidSounds.alarm,
ios:ios.glass,
循环:false,//仅限Android-API>=28
卷:1,//仅限Android-API>=28
asAlarm:false,//仅限Android-所有API
);
未来延迟(常量持续时间(毫秒:4000),(){
flatterringtoneplayer.stop();
});
打印(Const.todoTextList);
}
下面是notification manager类的实现

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);
  }
}
类通知管理器
{
flatterlocalnotificationsplugin flatterlocalnotificationsplugin;
AndroidInitializationSettings initializationSettingsAndroid;
IOS初始化设置初始化设置SIOS;
初始化设置初始化设置;
void initNotificationManager()
{
initializationSettingsAndroid=新的AndroidInitializationSettings(“@mipmap/ic_launcher”);
initializationSettingsIOS=新IOSSInitializationSettings();
initializationSettings=新的initializationSettings(initializationSettingsAndroid,initializationSettingsIOS);
FlatterLocalNotificationsPlugin=新的FlatterLocalNotificationsPlugin();
flatterLocalNotificationsPlugin.initialize(初始化设置);
}
void showNotificationWithDefaultSound(字符串标题、字符串正文)
{
var androidPlatformChannelSpecifics=新的AndroidNotificationDetails(“您的频道id”、“您的频道名称”、“您的频道描述”、重要性:重要性.Max、优先级:优先级.High);
var iOSPlatformChannelSpecifics=新的IOSNotificationDetails();
var platformChannelSpecifics=新的通知详细信息(androidPlatformChannelSpecifics、iOSPlatformChannelSpecifics);
flatterLocalNotificationsPlugin.show(0、标题、正文、平台通道说明);
}
静态常量MethodChannel platform=MethodChannel(“您的频道名称”);
/*Future ShowNotificationWith AlarmSound()异步{
///这将通过在中实现的平台通道调用方法
///示例应用程序返回默认报警声音的Uri并使用
///正如通知所说
var iOSPlatformChannelSpecifics=新的IOSNotificationDetails();
最后一个字符串alarmUri=await platform.invokeMethod('getAlarmUri');
最终UriAndroidNotificationSound uriSound=
//UriAndroidNotificationSound(AndroidSounds.alarm.toString());
UriAndroidNotificationSound(报警URI);
最终AndroidNotificationDetails AndroidPlatformChannels规范=
AndroidNotificationDetails(
“uri频道id”、“您的频道名称”、“您的频道描述”,
声音:uriSound,
styleInformation:constdefaultstyleinformation(true,true));
最终NotificationDetails platformChannelSpecifics=NotificationDetails(androidPlatformChannelSpecifics,iOSPlatformChannelSpecifics);
等待本地通知。显示(
0,“uri声音标题”,“uri声音主体”,平台通道细节);
}*/
//用于自定义通知
Future\u showNotificationCustomSound()异步{
常量AndroidNotificationDetails AndroidPlatformChannelSpecifications=
AndroidNotificationDetails(
'您的其他频道id',
'您的其他频道名称',
“您的其他频道描述”,
声音:rawsourceandridnotificationsound('easy_-go'),
);
const IOS通知详细信息IOSplatformChannelSpecifications=
IOSNotificationDetails(声音:“轻松进行”);
//const macosnotification详细信息macosplatformchannelspecifications=
//MacOSNotificationDetails(声音:“slow\u spring\u board.aiff”);
const NotificationDetails platformChannelSpecifics=NotificationDetails(androidPlatformChannelSpecifics,iOSPlatformChannelSpecifics);
等待本地通知。显示(
0,
“自定义声音通知标题”,
“自定义声音通知正文”,
平台(具体信息);
}
}

如果我不关闭实际的应用程序,它可以正常工作。一旦我关闭应用程序,通知将不起作用。我无法在模拟器中重现此问题。如果我得到任何建议,如何在模拟器中重现此问题,这也将对我有帮助。

您是否有可能从IDE启动应用程序?当我从VS代码运行我的应用程序时,我有同样的行为。当我从IDE停止应用程序时,警报也会被“取消计划”。但是当我点击设备上的图标运行时,它就工作了。你不是碰巧从IDE启动了你的应用程序吗?当我从VS代码运行我的应用程序时,我有同样的行为。当我从IDE停止应用程序时,警报也会被“取消计划”。但当我通过点击设备上的图标来运行时,它就起作用了。