【问题标题】:How can I play a recorded sound using a local notification?如何使用本地通知播放录制的声音?
【发布时间】:2011-06-29 00:06:05
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: ios xcode avaudiorecorder uilocalnotification


    【解决方案1】:

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

    localNotification.soundName = @"MySoundFile.wav";
    

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

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

    另见UILocalNotification Class Reference #soundName

    【讨论】:

    • 主包中存储的声音文件是否一定是运行时无法更改的静态资源?
    • 虽然在模拟器中可以做到,但在iOS设备上是不行的。
    【解决方案2】:

    我认为这对于 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)
    

    然后您可以将声音保存在那里。

    【讨论】:

    • 还有其他人设法做到这一点吗?苹果文档说您应该能够从应用程序容器中的 Library/Sounds 加载声音文件,但我仍然没有成功,驱使我绕过弯道并举起我的应用程序!
    • @Jason,这是我为测试它而创建的项目,github.com/chuy47/RecordedSoundNotification 屏幕有 3 个按钮,“开始录制”、“停止并保存”和“发送通知”使用自定义声音后4秒,在这个项目中,当应用程序处于前台时,我不管理通知,为此您必须在AppDelegate中的“application(application:,didReceiveLocalNotification :)”方法中实现它,以便测试自定义在此项目中,您必须启动通知(保存声音后)并点击主页按钮将应用程序发送到后台。
    • 非常感谢。今晚我会检查一下,看来你可以成为我的救星!
    • Gerardo,再次感谢我刚刚测试了这个,现在我可以在我的应用程序中使用它了,太棒了!事实证明,我实际上并不遥远,信不信由你,这取决于我对声音名称的应用,我正在使用似乎不需要的库的完整路径,但您确实需要添加参考到捆绑包中的子文件夹。无论如何都排序了:)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多