如何使用文档目录中的声音文件进行本地通知?

Muh*_*qib 1 iphone cocoa-touch ios

在我的 iOS 应用程序中,如何播放存储在应用程序文档目录中的声音文件以用于本地通知,而不是应用程序包中的声音文件?

我在 App Store 上看到了几个应用程序这样做,我想知道这怎么可能。

And*_*ard 5

实际上可以在不在应用程序主包 (NSBundle) 中的本地通知中播放自定义声音。

声音必须存储在Library/Sounds目录中,例如: /var/mobile/Containers/Data/Application/DD7E6BA0-2FC0-4DE0-95BF-C2E9C9A94E08/Library/Sounds/mySound.caf

当您在 UILocalNotificationsoundName属性中引用声音文件时,您只需写入文件名,而不是完整的目录路径:

alert.soundName = @"mySound.caf";
Run Code Online (Sandbox Code Playgroud)

在 iOS9.3.5 上测试和工作。我还没有尝试过其他 iOS 版本。

脚注:

我在搜索有关此处远程通知的 Apple 文档时碰巧找到了此信息- 特别是“有效负载键”部分,其中提到了声音。

Apple 的本地和远程通知文档(此处)还提到如果声音文件位于应用程序的主包或数据容器中,则可以使用它们:

要播放声音,请将声音分配给 soundName 属性。您可以在应用程序的主包(或数据容器)中分配非本地化自定义声音的文件名,也可以分配 UILocalNotificationDefaultSoundName 以获取默认系统声音。声音应始终伴随着警报消息的显示或图标的标记;在没有其他通知类型的情况下不应播放声音。