1.0首先知道怎么去撥打電話?
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
2.0 iOS10后此方法被遺棄,并且打電話的彈窗出現(xiàn)時有延遲,優(yōu)化下
NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", content_mobile];
NSComparisonResult compare = [[UIDevice currentDevice].systemVersion compare:@"10.0"];
if (compare == NSOrderedDescending || compare == NSOrderedSame) { // 大于等于10.0系統(tǒng)使用此openURL方法
? ? ? ? ? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil];
} else {
? ? ? ? ? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
}
3.0 好了 現(xiàn)在開始監(jiān)聽狀態(tài),網(wǎng)上有不少類似的,這里十分感謝這位大神的分享,來個傳送門以表敬意?IOS 系統(tǒng)打電話事件的監(jiān)聽與狀態(tài)獲取 - CSDN博客?但是我發(fā)現(xiàn)這個方法中很多都是被遺棄了提示讓使用?CXCallObserver,于是我就試用了下
4.0 百度一番,并未找到OC關(guān)于CXCallObserver的用法,不過找了swift大神的一份此類代碼。來個傳送門以表敬意Swift3.0撥打電話,獲取通話狀態(tài)(接通,掛斷...) - CSDN博客,然后我根據(jù)swift的代碼改寫成OC,經(jīng)測試成功。首先引用頭文件、遵守CXCallObserverDelegate協(xié)議,并聲明變量
#import <CallKit/CallKit.h>
@property(nonatomic,strong)CXCallObserver *callObserver;
然后就是實例化變量
self.callObserver = [[CXCallObserver alloc] init];
[self.callObserver setDelegate:self queue:dispatch_get_main_queue()];
最后實現(xiàn)代理方法
-(void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call{
? ? ? if (call.isOutgoing) {
? ? ? ? ? ? ?DLog(@"電話播出");
? ? ? ? ? ? ? ? ? ? ? ? ?if (call.hasConnected) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DLog(@"電話接通");
? ? ? ? ? ? ? ? ? ? ? ? ?}else if (call.hasEnded){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DLog(@"電話掛斷");
? ? ? ? ? ? ? ? ? ? ? ?}else if (call.isOnHold){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DLog(@"無人接聽掛斷"); }
? ? ? ?}else{
? ? ? ? ? ? ? ? ? DLog(@"other error");
? ? ?}
}
到此結(jié)束,如有疑問或者文章有錯誤,歡迎指正