2016-10-13 4 views
2

Я хочу получить состояния телефонных звонков в своем приложении.
После некоторого поиска я нашел CoreTelephony рамки. Но это не рекомендуется в iOS 10. SO есть ли другая альтернатива?
Я также нашел CallKit. Новая инфраструктура в iOS 10. Но не получило состояний вызова от того, что я искал.получать состояния телефонных звонков в iOS 10

+0

Что вы хотите передать словом «состояния вызова»? Не могли бы вы рассказать. –

+0

«набор номера», «отключен», «подключен», как состояния для телефонного звонка. – DeathStroke

+0

Итак, вы хотите, чтобы некоторые делегаты, которые дают вам такие состояния, когда произошел какой-либо переход вызова, я прав? –

ответ

-3

Apple не позволяет получить доступ к этой информации, хотя вы можете сделать это, используя сторонние библиотеки, но ваше приложение будет отклонено во время отправки в App Store, потому что яблоко не позволяет получить доступ к конфиденциальной информации пользователя.

+1

Это неправда, информация о состояниях телефонных звонков может быть получена через открытый API. Посмотрите на другие ответы. –

1

Доступен некоторый метод делегата, указывающий статус входящих и исходящих вызовов.

См: https://developer.apple.com/reference/callkit

+0

Спасибо, приятель, я не знаю, я показываю ту же ссылку, но почему не нашел протокол. – DeathStroke

+0

Пожалуйста, проверьте: https://developer.apple.com/reference/callkit#symbols –

+1

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/18153914) – AMAN77

2

Чтобы получать уведомления о состояниях телефонного звонка, начиная с прошивкой 10, вы должны использовать CXCallObserver класс и реализовать его метод протокола CXCallObserverDelegate, что предлагается в this ответ:

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

Вы можете попробовать этот код:

  1. Создать экземпляр вызова observer

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

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") 
     } 
    } 
} 
+0

можно ли это сделать в фоновом режиме? – Why

+0

Да, это будет работать, когда ваше приложение находится на переднем плане или на заднем плане. –

+0

работает в фоновом режиме всего около 3 минут, а затем не работает ... Я закодировал следующее решение http: // stackoverflow.com/questions/43044035/detecting-gsm-call-states-in-ios-10-and-notification-from-background-state, где я показываю, как я вызываю его из фона. Он работает в течение 3 минут или около того, а затем не работает. Даже разместили щедрость на этом, что истекло. Теперь добавьте еще одну награду. – ankit

Смежные вопросы