我正在尝试在插入或拔出耳机时触发通知。我的工作原理是,如果我插入或拔下耳机,然后关闭应用程序,则会显示通知。但是,我需要该应用在后台执行此操作。
注意:我正在编写的代码专用于耳机进行测试,但是该应用程序将用于检测用户何时进出汽车。我相信我可以检查carAudio而不是耳机。出于测试目的,插拔耳机更容易。
func activateHeadPhonesStatus(){
NotificationCenter.default.addObserver(self, selector: #selector(self.audioRouteChangeListener(_:)), name: AVAudioSession.routeChangeNotification, object: AVAudioSession.sharedInstance())
}
@objc func audioRouteChangeListener(_ notification:Notification) {
guard let userInfo = notification.userInfo,
let reasonValue = userInfo[AVAudioSessionRouteChangeReasonKey] as? UInt,
let reason = AVAudioSession.RouteChangeReason(rawValue:reasonValue) else {
return
}
switch reason {
case .newDeviceAvailable:
print("headphone plugged in")
DispatchQueue.main.async {
self.createNotification()
}
case .oldDeviceUnavailable:
print("headphone unplugged")
DispatchQueue.main.async {
self.createNotification()
}
default: ()
}
}
我在“音频功能”中设置了背景模式。
我已经广泛检查了stackoverflow,但是找不到任何使用swift的最新示例。我也看过https://developer.apple.com/library/archive/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/HandlingAudioHardwareRouteChanges/HandlingAudioHardwareRouteChanges.html,但这没有详细说明如何在后台模式下使用。
我基本上需要该应用程序能够在用户连接到汽车时以及从我阅读的内容中提取出来,唯一的方法是通过AV Audio。我相信到目前为止所读到的内容都是有可能的,并且与Apple的“开车时请勿打扰”功能类似。