get phone call states in iOS 10

前端 未结 5 1926
梦谈多话
梦谈多话 2020-12-30 15:29

I want to get phone call states in my app.
After some search I found CoreTelephony framework. But that is deprecated in iOS 10. SO is there any other altern

相关标签:
5条回答
  • 2020-12-30 15:52

    You can try this code:

    1. Create the instance of call observer

      @property ( nonatomic ) CXCallObserver *callObserver;
      
    2. Initiate the instance and set the delegate

      _callObserver = [CXCallObserver new];
              [_callObserver setDelegate:self queue:dispatch_get_main_queue()];
      
    3. Add the call observer delegate

      - (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");     
          }
      }
      

    In Swift 4.2:

    var callObserver: CXCallObserver()
    
    callObserver.setDelegate(self, queue: DispatchQueue.main)
    
    func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
    
        if call == nil || call.hasEnded == true {
            print("CXCallState : Disconnected")
        }
    
        if call.isOutgoing == true && call.hasConnected == false {
            print("CXCallState : Dialing")
        }
    
        if call.isOutgoing == false && call.hasConnected == false && call.hasEnded == false && call != nil {
            print("CXCallState : Incoming")
        }
    
        if call.hasConnected == true && call.hasEnded == false {
            print("CXCallState : Connected")
        }
    }
    
    0 讨论(0)
  • 2020-12-30 16:00

    There is some delegate method available that indicate incoming and outgoing call status.

    See : https://developer.apple.com/reference/callkit

    0 讨论(0)
  • 2020-12-30 16:01

    Apple does not allow you to access these informations though you can do so by using third party libraries but your app would be rejected at the time of submittion to App Store because apple does not allow to gain access to sensitive user information .

    0 讨论(0)
  • 2020-12-30 16:06

    import CallKit into your AppDelegate and add the following code:

    // 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")
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-30 16:15

    To be notified about phone call states, starting from iOS 10, you should use CXCallObserver class and implement its CXCallObserverDelegate protocol method, that is suggested in this answer:

    - (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
        if (call.hasConnected) {
            // perform necessary actions
        }
    }
    
    0 讨论(0)
提交回复
热议问题