我有一个应用程序,要求用户录制自己的消息以在将来的某个时间播放。我的意图是使用 UILocalNotification 来做到这一点。不幸的是,与本地通知相关的声音似乎必须存储在主包中,但用户无法进行录制并将其保存在包中。
如何让用户录制的声音文件通过本地通知播放?
或者-如果应用程序未运行以捕获本地通知(无需等待用户响应警报)然后播放所需的声音文件,是否有办法?
谢谢!
我有一个应用程序,要求用户录制自己的消息以在将来的某个时间播放。我的意图是使用 UILocalNotification 来做到这一点。不幸的是,与本地通知相关的声音似乎必须存储在主包中,但用户无法进行录制并将其保存在包中。
如何让用户录制的声音文件通过本地通知播放?
或者-如果应用程序未运行以捕获本地通知(无需等待用户响应警报)然后播放所需的声音文件,是否有办法?
谢谢!
您可以UILocalNotification
通过如下设置属性为 a 分配(自定义)声音:
localNotification.soundName = @"MySoundFile.wav";
不幸的是,根据参考资料,无法使用未存储在主包中或由苹果声明的声音文件:
对于此属性,指定应用程序主包中声音资源的文件名(包括扩展名)或 UILocalNotificationDefaultSoundName 以请求默认系统声音。
我认为这对于 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)
然后你可以在那里保存你的声音。
本地通知的soundname
属性可以引用应用程序包中声音文件的路径。无法使用用户语音的录音,因为它无法在运行时保存到应用程序包中。
您不能先显示默认通知,然后打开应用程序并播放录制的语音,除非用户点击了通知。这意味着,如果用户不使用手机,他们收听录音的唯一机会是拿起手机,解锁并点击通知。所以我相信这远非你想要的。