带有自定义声音的 UILocalNotification 仅适用于 iOS 6.1 和 iOS 7.1,不适用于 iOS 7.0
Posted
技术标签:
【中文标题】带有自定义声音的 UILocalNotification 仅适用于 iOS 6.1 和 iOS 7.1,不适用于 iOS 7.0【英文标题】:UILocalNotification with custom sound only works on iOS 6.1 and iOS 7.1, not iOS 7.0 【发布时间】:2014-06-11 02:10:47 【问题描述】:我开发了一个应用程序,用户可以在其中选择一些自定义通知声音来发出声音。当应用不在前台时,这些通知将通过简单的 AVPlayer 或通过 UILocalNotification 在应用内显示。前台警报当然总是有效的。后台警报在我的一位测试人员的 iPhone 4S 上不起作用。
起初我以为是他手机的配置问题,但我们找不到任何东西。当我开始深入研究这个问题时,我发现他运行的是 ios 7.0.4。我尝试在运行 iOS 7 而不是 iOS 7.1 的模拟器上运行该应用程序,但 UILocalNotification 也没有任何声音。当我在我的模拟器中尝试 iOS 6.1 时,又完全没有问题了。我的运行 iOS 7.1 的硬件设备也没有重现该问题。无论什么版本,信息和标志总是显示,只是缺少声音。
然后我认为问题可能与它没有在应用程序的前台线程中运行有关。 performSelectorOnMainThread:withObject:waitUntilDone: 没有帮助。
这是相关代码:
+ (void)minimizedAppAlarm:(Settings *)settings;
UILocalNotification* notification = [[UILocalNotification alloc] init];
notification.alertBody = NSLocalizedString(@"WAKE_UP", @"Wake up!");
if (settings.playSound)
notification.soundName = @"somefile.mp3";
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
【问题讨论】:
【参考方案1】:这似乎与使用以下调用设置徽章编号有关:
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:number];
目前我不确定到底发生了什么,但是当应用程序最小化时我会从十倒计时到零,并且可能在它阻止警报之前将徽章设置为零。
我一直在运行我的应用程序而没有这些代码行,并且它在每个版本中都会触发后台通知。请注意,我一直在模拟器的低版本上测试这个应用程序,在我注意到任何变化之前我确实需要执行以下操作
从主屏幕中删除应用程序 重置内容和设置由于模拟器没有任何通知设置,我猜想如果我使用 setApplicationIconBadgeNumber,7.0 会以某种方式将通知设置为静音。现在我可以在没有倒计时功能的情况下继续完成应用程序,但我将继续测试,所以我确定我只需要禁用 iOS 7.0 或者如果我启动直接更改徽章编号的应用程序版本,大多数版本都存在问题.
【讨论】:
以上是关于带有自定义声音的 UILocalNotification 仅适用于 iOS 6.1 和 iOS 7.1,不适用于 iOS 7.0的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义声音的 PushSharp iOS PushNotification