Я пытаюсь изменять состояние кнопки в приложении в зависимости от состояния текущего звонка (если нет звонков в состоянии connected анимация кнопки не активна, если есть - активна). Для отслеживания состояния звонка я использовал код отсюда:
How to get a call event using CTCallCenter:setCall.... Все работает отлично пока приложение находится в foreground. Но после того как оно уходит в бэкграунд, отслеживание звонков прекращается.
В документации к
CTCallCenter.callEventHandler
написано:
When your application resumes the active state, it receives a single call event for each call that changed state—no matter how many state changes the call experienced while your application was suspended. The single call event sent to your handler, upon your application returning to the active state, describes the call’s state at that time.
Но при возвращении в активное состояние мне не приходит никаких call event, сохраняется последнее состояние звонка когда приложение еще было в foreground. В чем может быть проблема, как отследить состояние звонка в бэкграунде?
Мой код:
AppDelegate.swift
let callСenter = CTCallCenter()
func block (call:CTCall!)
{
callState = String(call.callState)
print(call.callState)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
//check for call state
callСenter.callEventHandler = block
...
return true
}
ViewController.swift
override func viewDidLoad()
{
super.viewDidLoad()
NotificationCenter.default.addObserver(
self,
selector: #selector(cameBackFromSleep),
name: NSNotification.Name.UIApplicationDidBecomeActive,
object: nil
)
...
}
func cameBackFromSleep()
{
self.viewWillAppear(true)
}
override func viewWillAppear(_ animated: Bool)
{
switch callState
{
case "CTCallStateConnected":
print("callState: ", callState)
self.textLabel.isHidden = true
startBtnAnimation()
case "CTCallStateDisconnected":
print("callState: ", callState)
self.textLabel.center.y += self.view.bounds.height
self.textLabel.isHidden = false
stopBtnAnimation()
default: break
}
}