Я пытаюсь изменить состояние кнопки в зависимости от состояния вызова. Я использовал код отсюда, чтобы определить состояние звонка: How to get a call event using CTCallCenter:setCallEventHandler: that occurred while the app was suspended?iOS Как определить состояние вызова в фоновом режиме?
И он отлично работает, когда приложение находится на переднем плане. Но это совсем не работает в фоновом режиме. В документации по CTCallCenter.callEventHandler
:
Когда приложение возобновляет активное состояние, он получает одно событие вызова для каждого вызова, который не изменил состояние независимо от того, сколько состояния изменяет вызов испытал в то время как ваше приложение было приостановлено. Событие однократного вызова , отправленное вашему обработчику, после вашего приложения , возвращающегося в активное состояние, описывает состояние вызова по этому адресу времени.
Но я не получаю никаких событий вызова, когда приложение возобновляется. Все, что я получаю, это последнее сохраненное состояние вызова, когда приложение находилось на переднем плане. Как определить состояние вызова в фоновом режиме?
Вот мой код:
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
}
}