带有自定义声音的 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

在本地通知上发送带有自定义声音的触觉

带有自定义声音的推送通知未在 iOS 中显示

带有自定义音频会话的 IOS 系统声音

带有 label.text 值的 Swift 本地通知自定义警报声音

如何在 Android + GCM 中获得带有声音 + 自定义应用程序图标的推送通知