@belenerd

Swift iOS Как отследить состояние звонка в бэкграунде?

Я пытаюсь изменять состояние кнопки в приложении в зависимости от состояния текущего звонка (если нет звонков в состоянии 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
        }
    }
  • Вопрос задан
  • 357 просмотров
Решения вопроса 1
@belenerd Автор вопроса
Может кому пригодится:
stackoverflow.com/questions/42267239/ios-how-to-de...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы