获取系统的通话记录 目前在真机测试 根据网上的一些获取对应的数据库路径,无法获得相应的数据库文件
要做一个回访记录的需求,主要是实现 打电话通话的时长
通过CTCallCenter 可以监听到 电话的相关状态 ,但是如果在打电话过程中,
1.自己双击home键,使得app运行后台 2.直接返回电话系统
这样会使得 CTCallCenter 无法继续监听
如果需要继续接听 需要自己先 让app回到主应用,然后在点击最上方电话块,继续接听电话
2. 直接拨打后 经测试时间5分钟 也可以监听到,所以在打电话的时候 实际是在当前app运行,没有退到后台
代码:
CTCallCenter 需要设置为属性 如果使用局部变量,便回失效
- (void)initCallCenter: (CTCallCenter *)callCenter {
__weak typeof(self) weakSelf = self;
callCenter.callEventHandler = ^(CTCall *call){
if ([call.callState isEqualToString:CTCallStateDisconnected]){
NSLog(@"挂断");
// if (!_isManualStopPlay) [weakSelf play];
self.str = [self.str stringByAppendingString:@"挂断 ,"];
}
else if ([call.callState isEqualToString:CTCallStateConnected]){
NSLog(@"接通");
self.str = [self.str stringByAppendingString:@"接通 ,"];
}
else if([call.callState isEqualToString:CTCallStateIncoming]){
NSLog(@"呼入尚未接通");
self.str = [self.str stringByAppendingString:@"呼入尚未接通 ,"];
}
else if ([call.callState isEqualToString:CTCallStateDialing]){
NSLog(@"呼出尚未接通");
self.str = [self.str stringByAppendingString:@"呼出尚未接通 ,"];
}
else{
NSLog(@"未知");
self.str = [self.str stringByAppendingString:@"未知 , "];
}
};
}
- (IBAction)handleCallButtonPress:(id)sender
{
CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init];
NSString *code = [networkInfo.subscriberCellularProvider mobileCountryCode];
if (code != nil) {
[self callTelephone];
return;
}else {
// 无法呼叫
}
}
- (void)callTelephone{
UIWebView *webView = [[UIWebView alloc] init];
[webView
loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"tel:10086"]]];
[[UIApplication sharedApplication].keyWindow addSubview:webView];
// 第二种打电话方式
// NSURL *phoneUrl = [NSURL URLWithString:[NSString stringWithFormat:@"telprompt://%@",@"10086"]];
// if ([[UIApplication sharedApplication] canOpenURL:phoneUrl]) {
// [[UIApplication sharedApplication] openURL:phoneUrl];
// }
}