【问题标题】:UILocalNotification with custom sound only works on iOS 6.1 and iOS 7.1, not iOS 7.0带有自定义声音的 UILocalNotification 仅适用于 iOS 6.1 和 iOS 7.1,不适用于 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];
}

【问题讨论】:

    标签: ios objective-c ios7 uilocalnotification


    【解决方案1】:

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

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:number];
    

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 2014-07-18
      • 2013-05-17
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多