UNNotificationRequest 仅在 iPhone 解锁时播放自定义声音
Posted
技术标签:
【中文标题】UNNotificationRequest 仅在 iPhone 解锁时播放自定义声音【英文标题】:UNNotificationRequest plays custom sound only when iPhone is unlocked 【发布时间】:2018-02-28 01:26:48 【问题描述】:我的应用正在下载一个 .wav 文件并将其移动到库/声音,然后通过 UNNotificationRequest
使用该声音的文件名安排本地通知。此请求按预期发送通知,但我添加的自定义声音仅在手机解锁时大声播放,而不是在通知发送到手机的锁定屏幕时播放。但是,如果我使用UNNotificationSound.default()
而不是我的自定义声音,则默认推送声音将在锁定屏幕和设备解锁时播放。任何人有任何想法可能导致这个问题?我的代码很简单:
let soundName = "demoSound.wav" // (or nil to use default)
let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests()
let content = UNMutableNotificationContent()
content.title = "Title"
content.body = "Body";
content.sound = soundName.flatMap UNNotificationSound(named: $0) ?? UNNotificationSound.default()
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
let identifier = "PushNotifierLocalNotification"
let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
center.add(request, withCompletionHandler: nil)
编辑:这对于捆绑的声音(拖放到 Xcode)来说不是问题,但只有当我使用由我的应用下载并移入库/声音的声音时,我才会看到上述问题。
【问题讨论】:
您运行的是哪个操作系统版本和设备? 如果您直接创建UNNotificationSound
并将其分配给content.sound
是否有效?我能够毫无问题地播放自定义声音。 let sound = UNNotificationSound(named: "carhorn.wav") content.sound = sound
希望您没有使用 ios10 作为您的测试设备...因为在 10.2 之前的版本中存在错误。见here
man1: 你能确定下载的文件(.wav)是否听得见吗?
这听起来像是文件保护的问题。您为下载的声音文件分配了什么级别的保护?查看FileProtectionType
了解更多信息。
【参考方案1】:
来自here,您会注意到:
波形音频文件格式(WAVE,或者由于其文件扩展名而更常称为 WAV - 两者都发音为“wave”[6])3[7][8][9](很少,Windows 音频) [10] 是一种 Microsoft 和 IBM 音频文件格式标准,用于在 PC 上存储音频比特流。
我认为 Apple 更喜欢 Apple 原生声音格式,例如 AIFF 或 CAF,它们都是 Apple 开发的。
如果问题仍然存在,您能否使用 AIFF 或 CAF 声音文件格式重试并确认使用?
你也可以看看here。
【讨论】:
如果不适用于 AIFF 或 CAF,则问题可能与文件访问权限问题有关。 感谢您的想法,但这似乎对 WAV 和 CAF 文件都有效;据我了解,正确使用时,两者都可以包装未压缩的 PCM 文件。遗憾的是,使用 CAF 文件并不能解决我的问题。以上是关于UNNotificationRequest 仅在 iPhone 解锁时播放自定义声音的主要内容,如果未能解决你的问题,请参考以下文章
可以有多个未完成的 UNNotificationRequest 吗?
UNNotificationRequest 中的开始和结束日期
从请求中检索 UNNotificationRequest 声音名称
如何在 UNNotificationRequest 中设置重复间隔和触发日期