发送通知时是不是可以停止播放 UILocalNotification 的声音?

Posted

技术标签:

【中文标题】发送通知时是不是可以停止播放 UILocalNotification 的声音?【英文标题】:Is it possible to stop the sound of a UILocalNotification from playing when the notification is delivered?发送通知时是否可以停止播放 UILocalNotification 的声音? 【发布时间】:2011-01-21 19:12:56 【问题描述】:

如果 UILocalNotification 触发并设置了声音,并且用户在通知警报上点击“取消”,则声音会停止。但是,如果用户点击“查看”,ios 就会将通知传递给应用程序,并且声音会继续播放。有没有办法从应用程序中取消这个声音?通知发送后取消应用程序中的通知不起作用(我没想到,毕竟通知已经发送),因为我没有声音的系统声音ID(我没有'不首先分配它),我不能调用 AudioServicesDisposeSystemSoundID(可以吗?)。

如果用户点击通知警报的操作按钮,是否可以停止播放 UILocalNotification 声音?

【问题讨论】:

【参考方案1】:

它也不会在设备上停止 (5.1)

我一直在尝试修复它,但我无法弄清楚。

我实际上是用这个在模拟器上停下来的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    // Override point for customization after application launch.
    UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotif) 
        [[UIApplication sharedApplication] cancelLocalNotification:localNotif];
        
    return YES;

但它仍然不会在设备上停止

【讨论】:

【参考方案2】:

显然问题只存在于模拟器(iOS 4.2 sdk)上,不存在于实际设备上。

【讨论】:

实际上并非如此。我刚刚在 ios 6 和 ios 7 设备上进行了测试。取消本地通知后,本地通知声音不会停止。 请注意,我的答案是在 3 年前,在 ios 6 和 7 之前。当时我手头的设备和 iOS 版本都是如此。 可能老bug又出现了——我看到手机未锁定时声音被中断(通知出现在顶部),但如果设备被锁定并且通知出现在锁定屏幕上,声音不会中断 【参考方案3】:

可以在application delegate方法中处理如下,如果用户点击通知的alert的Action按钮,那么会调用下面的方法,我们可以取消通知

- (void)application:(UIApplication *)app
didReceiveLocalNotification:(UILocalNotification *)notif 
[[UIApplication sharedApplication]cancelLocalNotification:notif];

【讨论】:

您能否确认在哪个设备和哪个特定版本上实际停止(静音)通知声音?【参考方案4】:

我在最初使用 iPhone 4 进行测试时遇到了同样的问题。

问题似乎在 iOS 8 中已经消失,现在本地通知声音在转换到应用程序后取消时停止。

iPhone4 [ iOS - 7.1.2 ] - 本地通知声音无论如何都会在 App 中播放 iPhone6 [ iOS - 8.1.1 ] - 本地通知以编程方式取消时声音停止

据我推断,iOS 8.x 中似乎存在修复程序(可惜我没有找到任何有关此事的文档或发行说明。)

对于专注于 iOS 8 的应用程序而言,该问题不再是问题(前提是您取消了传入的本地通知)

【讨论】:

以上是关于发送通知时是不是可以停止播放 UILocalNotification 的声音?的主要内容,如果未能解决你的问题,请参考以下文章

iphone推送通知是不是发送实际的声音数据来播放,只是一个文件名,还是由应用程序处理?

简单的 MP3 播放器,通知不工作

如何使用 Apple 推送通知播放自定义声音?

当其他设备前景时,我应该停止发送推送通知吗?

Android 服务在推送通知发送时启动并在服务任务完成后停止

如何接收应用程序停止或设备关闭时发送的 GCM 推送通知?