以下,來講解在app內如何調用打電話功能和監聽電話來電、掛斷、撥號等功能。
簡單的UI布局:
首先,先實現撥打電話的功能,以便於后續測試:
// 撥打電話 - (IBAction)dialingButtonClick:(UIButton *)sender { NSURL *url = [NSURL URLWithString:@"tel:138xxxxxxxx"];// 填入有效電話號碼 NSURLRequest *request = [NSURLRequest requestWithURL:url]; UIWebView * callWebview = [[UIWebView alloc] init]; [callWebview loadRequest:request]; [self.view addSubview:callWebview]; }
然后,監聽電話,首先需要我們導入一個框架並引入頭文件:
// 導入框架 CoreTelephony.framework #import <CoreTelephony/CTCallCenter.h> #import <CoreTelephony/CTCall.h>
監測電話:
// 監測電話 - (void)monitorCall { self.callCenter.callEventHandler = ^(CTCall* call) { if (call.callState == CTCallStateDisconnected) { NSLog(@"電話結束或掛斷電話"); } else if (call.callState == CTCallStateConnected){ NSLog(@"電話接通"); } else if(call.callState == CTCallStateIncoming) { NSLog(@"來電話"); } else if (call.callState ==CTCallStateDialing) { NSLog(@"撥號打電話(在應用內調用打電話功能)"); } }; } #pragma mark - getter Methods - (CTCallCenter *)callCenter { if (!_callCenter) { _callCenter = [[CTCallCenter alloc] init]; } return _callCenter; }
// 注:值得說明的是,CTCallCenter 呼叫中心必須強引用,防止對象被釋放掉而無法監測電話。
場景:
1、點擊按鈕,撥號時:
2016-06-08 16:38:14.334 Demo_監聽電話狀態[5732:1781472] applicationWillResignActive 2016-06-08 16:38:15.520 Demo_監聽電話狀態[5732:1781472] applicationDidBecomeActive 2016-06-08 16:38:15.621 Demo_監聽電話狀態[5732:1784552] 撥號打電話(在應用內調用打電話功能)
2、手機來電,然后掛斷:
2016-06-08 16:40:11.479 Demo_監聽電話狀態[5732:1785743] 來電話 2016-06-08 16:40:11.819 Demo_監聽電話狀態[5732:1781472] applicationWillResignActive 2016-06-08 16:40:13.746 Demo_監聽電話狀態[5732:1785743] 電話結束或掛斷電話 2016-06-08 16:40:15.267 Demo_監聽電話狀態[5732:1781472] applicationDidBecomeActive
3.手機來電,接通,然后掛斷:
2016-06-08 16:42:11.479 Demo_監聽電話狀態[5732:1785743] 來電話 2016-06-08 16:42:11.819 Demo_監聽電話狀態[5732:1781472] applicationWillResignActive 2016-06-08 16:42:11.919 Demo_監聽電話狀態[5732:1785743] 電話接通 2016-06-08 16:42:13.746 Demo_監聽電話狀態[5732:1785743] 電話結束或掛斷電話 2016-06-08 16:42:15.267 Demo_監聽電話狀態[5732:1781472] applicationDidBecomeActive
尊重作者勞動成果,轉載請注明: 【kingdev】