具有自定义声音的UILocalNotification仅适用于iOS 6.1和iOS 7.1,而不适用于iOS 7.0

时间:2014-06-11 02:10:47

标签: ios objective-c ios7 uilocalnotification

我开发了一个应用程序,用户可以从一些自定义通知声音中选择声音。当应用程序不在前台时,这些通知将通过简单的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 个答案:

答案 0 :(得分:0)

似乎与使用以下调用设置徽章编号有关:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:number];

目前我不确定到底发生了什么,但是当应用程序最小化时我会从十到零进行倒计时,并且可能在它阻止的警报之前将徽章设置为零。

我一直在运行我的应用程序而没有这些代码行,并且它在每个版本中都会触发后台通知。请注意,我一直在模拟器中的较低版本上测试此应用程序,我确实需要在发现任何更改之前执行以下操作

  • 从主屏幕中删除应用
  • 重置内容和设置

由于模拟器没有任何通知设置,我猜想如果我使用setApplicationIconBadgeNumber,7.0会将通知设置为静音。现在我可以在没有倒计时功能的情况下继续完成应用程序,但我将继续测试,所以我确定我只需要禁用iOS 7.0或大多数版本存在问题,如果我启动直接更改徽章编号的应用程序版本。