停止ios 7远程通知声音

时间:2013-10-01 20:03:26

标签: ios7 apple-push-notifications

在iOS 7中,当用户从锁定屏幕轻扫我的一个通知并被带到我的应用程序时,通知声音会继续播放(与iOS 6不同)。当我的应用程序在iOS 7中启动时,有没有办法以编程方式停止声音?

注意:请参阅已接受的答案以获取粗制滥造的解决方法。

3 个答案:

答案 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])