在iOS 10中获得电话状态

我想在我的应用程序中获得电话状态。
经过一番search,我find了CoreTelephony框架。 但是在iOS 10中已经弃用了。那么还有其他的select吗?
我也find了CallKit 。 iOS 10中的一个新框架。但是没有得到与我search相同的调用状态。

import CallKit到您的AppDelegate并添加以下代码:

 // AppDelegate var callObserver: CXCallObserver! // add property // in applicationDidFinishLaunching... callObserver = CXCallObserver() callObserver.setDelegate(self, queue: nil) // nil queue means main thread extension AppDelegate: CXCallObserverDelegate { func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) { if call.hasEnded == true { print("Disconnected") } if call.isOutgoing == true && call.hasConnected == false { print("Dialing") } if call.isOutgoing == false && call.hasConnected == false && call.hasEnded == false { print("Incoming") } if call.hasConnected == true && call.hasEnded == false { print("Connected") } } } 

你可以试试这个代码:

  1. 创build呼叫观察者的实例

     @property ( nonatomic ) CXCallObserver *callObserver; 
  2. 启动实例并设置委托

     _callObserver = [CXCallObserver new]; [_callObserver setDelegate:self queue:dispatch_get_main_queue()]; 
  3. 添加呼叫观察员委托

     - (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call{ if (call == nil || call.hasEnded == YES) { NSLog(@"CXCallState : Disconnected"); } if (call.isOutgoing == YES && call.hasConnected == NO) { NSLog(@"CXCallState : Dialing"); } if (call.isOutgoing == NO && call.hasConnected == NO && call.hasEnded == NO && call != nil) { NSLog(@"CXCallState : Incoming"); } if (call.hasConnected == YES && call.hasEnded == NO) { NSLog(@"CXCallState : Connected"); } } 

要获得关于电话状态的通知,从iOS 10开始,您应该使用CXCallObserver类并实现其在此答案中build议的CXCallObserverDelegate协议方法:

 - (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call { if (call.hasConnected) { // perform necessary actions } } 

有一些代表方法可用来指示呼入和呼出状态。

请参阅: https : //developer.apple.com/reference/callkit

苹果公司不允许你访问这些信息,虽然你可以通过使用第三方库来做到这一点,但是你的应用程序在提交给App Store时会被拒绝,因为苹果不允许访问敏感的用户信息。