在iOS 7中,当用户从锁定屏幕轻扫我的一个通知并被带到我的应用程序时,通知声音会继续播放(与iOS 6不同)。当我的应用程序在iOS 7中启动时,有没有办法以编程方式停止声音?
注意:请参阅已接受的答案以获取粗制滥造的解决方法。
答案 0 :(得分:6)
我很确定这是苹果公司的一个错误,请参阅devforums.apple.com/message/888091(感谢Gui13)。提交一份重复的错误报告,让Apple注意它,that is how Apple assigns priority to bugs。在此期间,以下内容可以正常运行,但也会清除通知中心的所有通知,这当然是一种伪劣的解决方法,但在我的情况下是值得的,直到修复:
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
答案 1 :(得分: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];
}
}
答案 2 :(得分:0)
对于iOS 7,可接受的答案可能是唯一可行的选择。对于来到这里支持最低 iOS 10 版本的开发人员,此方法有效。
您可以通过致电
从通知中心删除所有通知import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "authorities")
public class Authority {
@Id
@Column(name = "userid")
private int userID;
private String username;
private String authority;
@OneToOne(mappedBy = "authority")
private UserRegistration user;
public Authority() {
}
public Authority(int userID, String username, String authority) {
this.userID = userID;
this.username = username;
this.authority = authority;
}
public int getUserID() {
return userID;
}
public void setUserID(int userID) {
this.userID = userID;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAuthority() {
return authority;
}
public void setAuthority(String authority) {
this.authority = authority;
}
public UserRegistration getUser() {
return user;
}
public void setUser(UserRegistration user) {
this.user = user;
}
}
这与接受的答案有非常相似的影响:音频停止播放,并且所有通知均从通知中心中删除。
一种改进的解决方案是使用
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
这将仅停止给定通知的音频,并将其从通知中心中删除。
要获取所有已传递通知的ID,请使用
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [String])