如何使用本地通知播放录制的声音?

我有一个应用程序,要求用户录制他们自己的消息,在未来的某个时间播放。 我的意图是使用UILocalNotification来做到这一点。 不幸的是,与本地notif相关联的声音似乎必须存储在主包中,但用户不能进行录制并将其保存在包中。

如何通过本地通知播放用户录制的声音文件?

另外 – 如果应用程序没有运行捕获本地通知(没有等待用户响应警报),然后播放所需的声音文件有没有办法?

谢谢!

您可以通过设置其属性,将一个(自定义)声音分配给UILocalNotification ,如下所示:

 localNotification.soundName = @"MySoundFile.wav"; 

不幸的是,根据参考文献,不可能使用未存储在主包中或由苹果声明的声音文件:

对于此属性,指定应用程序主包中声音资源的文件名(包括扩展名)或UILocalNotificationDefaultSoundName以请求默认系统声音。

另请参阅UILocalNotification类引用#soundName

我认为这是可能的ios 9,这是苹果文档说:

对于iOS中的远程通知,您可以指定iOS在播放应用程序的本地或远程通知时播放的自定义声音。 声音文件可以位于客户端应用程序的主包中,也可以位于应用程序数据容器的Library / Sounds文件夹中。

我testing了将声音保存到Library / Sounds文件夹,然后使用它与本地通知,它在iOS 9上运行良好,之后,我在iOS 8上尝试相同,它不起作用,所以我的结论是,这是可能的仅适用于iOS 9

您可以通过以下方式访问库目录:

 let fileManager = NSFileManager.defaultManager() let libraryPath = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)[0] let soundsPath = libraryPath + "/Sounds" 

如果目录不存在,您必须创build该目录:

 fileManager.createDirectoryAtPath(soundsPath, withIntermediateDirectories: false, attributes: nil) 

然后你可以保存你的声音。

本地通知的soundname属性可以引用应用程序包中声音文件的path。 不能使用用户声音的录音,因为它不能在运行时保存到应用程序包中。

您不能显示默认通知,然后打开应用程序并播放录制的语音,除非用户点击了通知。 也就是说,如果用户没有使用手机,他们只能听录音的机会是,如果他们拿起手机,解锁,并点击通知。 所以我相信这远远不是你想要的。