Ich versuche den Status der Taste je nach Anrufstatus zu ändern. Ich habe Code von hier verwendet, um Anrufstatus zu erkennen: How to get a call event using CTCallCenter:setCallEventHandler: that occurred while the app was suspended?iOS Wie kann ich den Anrufstatus im Hintergrund erkennen?
Und es funktioniert gut, wenn App im Vordergrund ist. Aber es funktioniert überhaupt nicht im Hintergrund. In der Dokumentation für CTCallCenter.callEventHandler
:
Wenn Ihre Anwendung des aktiven Zustand wieder aufgenommen wird, es ein einziges Rufereignis für jeden Anruf erhält, die staatlich unabhängig davon verändert, wie viele staatlichen der Anruf ändert erfahren, während der Anwendung ausgesetzt wurde. Das Einzelanrufereignis, das an Ihren Handler gesendet wird, wenn Ihre Anwendung in den aktiven Zustand zurückkehrt, beschreibt den Status des Anrufs unter der Zeit.
Aber ich bekomme keine Anrufereignisse, wenn App wieder aktiv wird. Alles, was ich bekomme, ist der zuletzt gespeicherte Anrufstatus, wenn die App im Vordergrund war. Wie kann ich den Anrufstatus im Hintergrund erkennen?
Hier ist mein Code:
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
}
}