2017-03-10 21 views
1

私のアプリで、ユーザが電話をかけているときにBLEとやり取りするかどうかを監視する必要があります。テストするために基本的な呼び出しオブザーバーを書いたが、アプリケーションがバックグラウンドになっても更新を受け取っていない。バックグラウンドでコールステータス通知を取得する方法を知っていた人がいるのだろうかと思っていましたか?CXCallObserver - バックグラウンドでのモニタ

class ViewController: UIViewController{ 
    @IBOutlet weak var callStatusLabel: UILabel! 
    var callObs : CXCallObserver! 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    / 
    callObs = CXCallObserver() 
    callObs.setDelegate(self, queue: nil) 
    print("Monitoring Calls") 
    callStatusLabel.text = "Monitoring..." 
    self.view.backgroundColor = UIColor.yellow 
    } 
    override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    / 
    } 

} 
extension ViewController : CXCallObserverDelegate 
{ 
    func callObserver(_: CXCallObserver, callChanged: CXCall) 
    { 
    if(callChanged.hasEnded) 
    { 
     print("Call Ended") 
     callStatusLabel.text = "Call Ended" 
     self.view.backgroundColor = UIColor.green 
    } 
    else if(callChanged.hasConnected) 
    { 
     print("Call Connected") 
     callStatusLabel.text = "Call Connected" 
     self.view.backgroundColor = UIColor.red 
    } 
    } 
} 

私は現在、次のバックグラウンドモードが有効になっている:AppDelegateに宣言 オーディオ、AirPlayの& PIP のLocアップデート VOIP 外部アクセサリCOMM がBLE 使用背景が

答えて

0

を取得

var bgTask = UIBackgroundTaskIdentifier() 

アプリがバックグラウンドになったら、次のようにバックグラウンドタスクを開始しますs

func applicationDidEnterBackground(_ application: UIApplication) { 
     self.bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: { 
      UIApplication.shared.endBackgroundTask(self.bgTask) 
      self.bgTask = UIBackgroundTaskInvalid 
     }) 
    }