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

时间:2011-06-29 00:06:06

标签: ios xcode avaudiorecorder uilocalnotification

我有一个应用程序,要求用户记录自己的消息,以便将来播放。我的意图是使用UILocalNotification来做到这一点。不幸的是,似乎与本地通知相关的声音必须存储在主包中,但用户无法进行录制并将其保存在包中。

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

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

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以通过如下设置其属性为UILocalNotification分配(自定义)声音:

localNotification.soundName = @"MySoundFile.wav";

不幸的是,根据该引用,不可能使用未存储在主包中或由apple声明的声音文件:

  

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

另见UILocalNotification Class Reference #soundName

答案 1 :(得分:3)

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

  

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

我测试了将声音保存到Library / Sounds文件夹中,然后使用本地通知使用它,它在iOS 9上运行正常,之后我在iOS 8上尝试了同样的功能,但它没有用,所以我的结论是这仅适用于iOS 9

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

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

如果目录不存在,则必须创建目录:

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

然后你可以在那里保存你的声音。

答案 2 :(得分:0)

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

除非用户点击了通知,否则您无法显示默认通知,然后打开应用并播放录制的语音。 这意味着,如果用户没有使用手机,他们唯一可能会收听录音的是他们拿起手机,解锁手机,然后点按通知。所以我相信这远非你想要的。