为啥我的 UILocalNotification 没有播放任何声音?
Posted
技术标签:
【中文标题】为啥我的 UILocalNotification 没有播放任何声音?【英文标题】:Why doesn't my UILocalNotification play any sound?为什么我的 UILocalNotification 没有播放任何声音? 【发布时间】:2014-05-08 04:24:42 【问题描述】:这让我发疯了,我相信我现在已经尝试了所有可能的方法,但我的手机仍然决定保持静音。我现在只希望它在我呈现本地通知时播放 any 声音。目前,UILocalNotificationDefaultSoundName
和我添加到我的应用程序包中的自定义声音都不起作用。我写了一个简单的倒计时应用,当倒计时结束时使用presentLocalNotification:
。
- (void)showLocalNotification
UILocalNotification *alarmNotification = [[UILocalNotification alloc] init];
alarmNotification.alertBody = [NSString stringWithFormat:@"fired at: %@", [NSDate date]];
alarmNotification.soundName = UILocalNotificationDefaultSoundName;
// alarmNotification.soundName = @"glass.aiff"; // "glass.aiff" is a file in my application bundle
[[UIApplication sharedApplication] presentLocalNotificationNow:alarmNotification];
我还展示了一个UIAlertView
,它将在收到通知时从AppDelegate
初始化和显示:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"alert" message:@"Local notification was received" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
收到本地通知并显示警报,在通知中心我也可以看到通知已被触发,只是声音不起作用...
我检查了每个关于堆栈溢出的类似问题,启用了我所有的声音设置,确保在应用程序的电话通知设置中启用,我什至收到来自其他应用程序的推送通知,而我正在测试声音在哪里播放...
我到底错过了什么,我的手机没有播放任何声音?当我触发它或收到它时,我是否必须导入一些框架或在通知上调用其他任何东西?
也许最简单的解决方案是,如果有人发布通知出现时播放默认声音所需的代码的最小版本(尽管我相信我自己已经编写了那个最小版本 - 除了它没有工作)。
顺便说一句,我在真机和模拟器上都试过这个应用程序,但都没有成功...
【问题讨论】:
这可能与我在 ios7 上运行并使用 Xcode 5 有关吗?我发现的几乎所有教程都是 iOS6 和更早版本......这对我来说没有任何意义,但是谁知道... 您是否尝试过将您的应用程序保持在后台?如果您的应用程序处于活动状态,我猜声音永远不会播放。 嗯,我从安排通知开始,它会在几秒钟内触发,但改用presentLocalNotification:
以获得更多控制权。不过,我现在要试试这个,谢谢你的提示。
成功了!!它播放默认声音和自定义声音!!!非常感谢!如果您将此添加为答案,我会将其标记为我的问题的解决方案,并再次给您投票! :)
是的,我添加了我的答案..
【参考方案1】:
如果您的应用程序在通知触发时处于前台,则不会自动播放声音。如果您的应用当时在后台,它只会自动播放声音。
您的屏幕截图看起来好像您的应用程序在您尝试时可能在前台处于活动状态。
根据 Apple 的推送通知文档:
如果系统发送通知时应用程序处于最前面且可见,则不会显示警报,不会标记图标,也不会播放声音。但是,如果应用程序委托实现了 application:didReceiveLocalNotification: ,则会调用它。 UILocalNotification 实例被传递到此方法中,委托可以检查其属性或访问 userInfo 字典中的任何自定义数据。
如果您愿意,您可以随时使用 AudioServicesPlaySystemSound() 方法自己播放声音。
【讨论】:
【参考方案2】:如果应用程序处于活动状态,UINotification 不会播放声音,因为它没有意义,它假定您在应用程序处于活动状态时看到通知,但如果应用程序未运行或在后台运行,它将播放声音通知用户通知已经到来。
干杯。
【讨论】:
【参考方案3】:您必须使用 *.caf
格式。我花了很多时间,但我找到了解决方案。
我试过*.mp3 *.wav
,但没有用。
我希望它有效。
如何转换为 *.caf 格式?
1) 打开终端
2) 示例:
cd /用户/用户名/桌面/文件夹名
点击进入
3)
afconvert -f caff -d LEI16@22050 -c 1 BlaBla.mp3 BlaBlaNew.caf
点击进入
【讨论】:
以上是关于为啥我的 UILocalNotification 没有播放任何声音?的主要内容,如果未能解决你的问题,请参考以下文章
将 UILocalNotification 同步到 Watch