[在iOS 7中,当用户从锁屏上滑动我的一个通知并带到我的应用程序时,通知声音会持续播放(与iOS 6不同)。当我的应用程序在iOS 7中启动时,有什么方法可以以编程方式停止该声音吗?
注意:请参阅可接受的答案以获取次要解决方法。
我很确定这是Apple的错误,请参阅devforums.apple.com/message/888091(感谢Gui13)。提交重复的错误报告,以使Apple重视它,例如that is how Apple assigns priority to bugs。同时,以下操作将起作用,但也会在通知中心清除您的所有通知,这当然是一种伪劣的解决方法,但在此情况得到解决之前,我认为这是值得的:
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
对使用没有帮助
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
通过单击通知进入应用程序后。
我通过处理带有声音的通知时发送了另一个空通知来解决了这个问题:
if (notification.soundName != nil) {
if (IS_IOS7) {
UILocalNotification *emptyNotification = [[UILocalNotification alloc] init];
emptyNotification.timeZone = [NSTimeZone defaultTimeZone];
emptyNotification.fireDate = [NSDate date];
emptyNotification.alertBody = @"";
[[UIApplication sharedApplication] scheduleLocalNotification:emptyNotification];
}
}
对于iOS 7,可接受的答案可能是唯一可行的选择。对于来这里支持至少iOS 10的开发人员,此方法有效。
您可以通过致电从通知中心删除所有通知
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
这与接受的答案具有非常相似的影响:音频停止播放,并且所有通知均从通知中心中删除。
一种改进的解决方案是使用
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [String])
这将仅停止给定通知的音频,并将其从通知中心中删除。
要获取所有已传递的通知的ID,请使用
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
let ids = notifications.map { $0.request.identifier }
}