2012-06-08 35 views
22

Tôi đã xem xét và tất cả những gì tôi có thể tìm thấy là kiểm tra callState của CTCallCenter. Tuy nhiên, điều này hoạt động bằng cách nghe một sự kiện - tùy thuộc vào việc ứng dụng đang hoạt động/tạm ngưng/tiếp tục sự kiện có thể được nâng lên vào thời điểm khác nhau hay không.iOS Cách kiểm tra xem hiện có trên điện thoại hay không

Điều tôi cần thay vì nghe sự kiện và được thông báo khi cuộc gọi được kết nối, tôi muốn tự quyết định khi nào hỏi liệu cuộc gọi có được kết nối hay không.

Trường hợp sử dụng: Khi cuộc gọi điện thoại được kết nối - người dùng biết và sẽ luôn nhấp vào biểu tượng ứng dụng, ứng dụng này sẽ mở ứng dụng. Tại thời điểm này tôi chỉ muốn chạy một chức năng nhanh để kiểm tra xem hiện có đang gọi hay không.

Điều này có thể thực hiện được không?

Trả lời

24

Đối tượng CTCallCenter có thuộc tính currentCallsNSSet của các cuộc gọi hiện tại. Nếu có cuộc gọi thì thuộc tính currentCalls phải là! = Nil.

Nếu bạn muốn biết liệu có cuộc gọi nào thực sự được kết nối không, bạn sẽ phải lặp qua các cuộc gọi hiện tại và kiểm tra số callState để xác định xem đó có phải là CTCallStateConnected hay không.

+0

tuyệt vời ... chỉ cần những gì tôi cần cảm ơn. Nếu các bạn nghĩ rằng câu hỏi này cũng giúp vui lòng upvote câu hỏi. – friend

+0

u đã cứu mạng của tôi –

6

Cảm ơn câu trả lời của ThomasW. Tôi nghĩ tôi cũng sẽ đăng mã.

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    CTCallCenter *ctCallCenter = [[CTCallCenter alloc] init]; 
    if (ctCallCenter.currentCalls != nil) 
    { 
     NSArray* currentCalls = [ctCallCenter.currentCalls allObjects]; 
     for (CTCall *call in currentCalls) 
     { 
      if(call.callState == CTCallStateConnected) 
      { 
       // connected 
      } 
     } 
    } 
} 
+2

Bạn có thể rút ngắn mã này rất nhiều bằng cách sử dụng liệt kê nhanh: 'cho (CTCall * gọi trong ctCallCenter.currentCalls) {...}'. Bạn không cần phải kiểm tra 'nil' hoặc chuyển đổi tập hợp thành một mảng. – omz

+0

bạn có thể đề xuất mã của bạn sau đó omz? tôi sẽ hạnh phúc hơn để upvote câu trả lời của bạn nếu nó sẽ chỉ đơn giản là bài viết của bong và được rất nhiều hiệu quả hơn và hiệu quả .. chúc mừng omz. – Pavan

+0

chính xác những gì tôi cần! upvoted! @AlBeebe: currentCalls được sử dụng trong dòng tiếp theo. – rockstarberlin

27
#import <CoreTelephony/CTCallCenter.h> 
#import <CoreTelephony/CTCall.h> 

-(bool)isOnPhoneCall { 
    /* 

    Returns TRUE/YES if the user is currently on a phone call 

    */ 

    CTCallCenter *callCenter = [[[CTCallCenter alloc] init] autorelease]; 
    for (CTCall *call in callCenter.currentCalls) { 
     if (call.callState == CTCallStateConnected) { 
      return YES; 
     } 
    } 
    return NO; 
} 
+1

Điều này có vẻ không hoạt động khi xây dựng trong Xcode 7 cho iOS 9.x –

Các vấn đề liên quan