发送通知时是不是可以停止播放 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推送通知是不是发送实际的声音数据来播放,只是一个文件名,还是由应用程序处理?