Flutter Local Notifications自定义长音效真机失效问题求助
问题描述
添加3-4秒的自定义通知音效时一切正常,但使用1分钟以上的长音效(比如唤拜音效)时,仅在Android模拟器中能正常播放;在小米11T、华为Mate 10 Lite、荣耀X7等真机上,通知可正常触发,但只有震动,无音效。使用flutter_local_notifications插件的相关代码如下:
await localNotificationsPlugin.zonedSchedule( id, title, body, tz.TZDateTime.from(date, tz.local), NotificationDetails( android: AndroidNotificationDetails( sound, 'High Importance Notifications', channelDescription: 'Channel Desc', color: Colors.green, playSound: true, priority: Priority.max, sound: RawResourceAndroidNotificationSound(sound), importance: Importance.max, enableVibration: true, channelShowBadge: true, icon: '@mipmap/ic_launcher', // styleInformation: BigTextStyleInformation(body), ), iOS: const DarwinNotificationDetails( presentAlert: true, presentBadge: true, presentSound: true, sound: 'sound.wav', ), ), uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, payload: jsonEncode({ 'title': title, 'id': '$id', }), ); await localNotificationsPlugin.initialize( const InitializationSettings( android: AndroidInitializationSettings( '@mipmap/ic_launcher', ), iOS: DarwinInitializationSettings(), ), );
可行解决方法
1. 适配系统对通知音效的长度限制
小米、华为、荣耀这类国产定制ROM,对通知音效长度有严格限制(通常不超过30秒),超过时长的音频会被系统自动截断或直接忽略,这是系统层面的默认约束,目的是避免过长音效干扰用户。
2. 改用媒体通道播放长音效
通知通道的设计定位是短提示音,长音频应该通过媒体播放实现:
- 在通知的
payload中携带长音效的标识 - 在通知触发或点击的回调里,使用
audioplayers这类音频插件启动媒体播放 - 需要申请前台服务权限,防止播放过程中被系统后台杀死
参考思路代码:
// 初始化时绑定通知回调 await localNotificationsPlugin.initialize( const InitializationSettings( android: AndroidInitializationSettings('@mipmap/ic_launcher'), iOS: DarwinInitializationSettings(), ), onDidReceiveNotificationResponse: (response) { final payload = jsonDecode(response.payload!); // 调用长音效播放方法 _playLongAudio(payload['sound']); }, ); // 长音效播放逻辑 void _playLongAudio(String soundFileName) async { final player = AudioPlayer(); await player.play(AssetSource('assets/sounds/$soundFileName.mp3')); }
3. 检查音频文件的兼容性
确保长音频文件符合Android系统要求:
- 优先使用MP3格式,避免高比特率、高采样率的文件
- 确认音频编码在系统支持范围内,异常编码可能导致无法播放
4. 重置通知渠道设置
部分国产ROM会强制覆盖通知渠道的自定义音效设置,可尝试:
- 卸载应用后重新安装,确保通知渠道的属性被正确初始化(通知渠道创建后部分属性无法修改)
- 在手机的应用通知设置中,手动确认对应渠道的音效是否已正确配置
内容的提问来源于stack exchange,提问作者Zakarya
相关产品推荐
相关产品推荐

