我环顾四周,我能找到的就是检查CTCallCenter的callState。但是,这可以通过监听事件来实现 - 根据应用程序是处于活动状态还是暂停/恢复,事件可以在不同时间引发。
我需要的不是听取事件,而是在连接呼叫时被告知,我想决定自己何时询问呼叫是否已连接。
使用案例:当连接电话时 - 用户知道并将始终点击应用程序图标,这将打开应用程序。这时我只想运行一个快速功能来检查当前是否正在通话。
这甚至可能吗?
答案 0 :(得分: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 :(得分:25)
CTCallCenter
对象的currentCalls
属性是当前调用的NSSet
。如果有呼叫则currentCalls
属性应为!= nil。
如果您想知道是否实际连接了任何呼叫,那么您必须遍历当前呼叫并检查callState
以确定它是否为CTCallStateConnected
。< / p>
答案 2 :(得分:6)
感谢ThomasW的回答。我以为我也会发布代码。
- (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
}
}
}
}
答案 3 :(得分:1)
我遇到了同样的问题,但是我认为从 iOS 10 执行此操作的正确方法是:
func checkForActiveCall() -> Bool {
for call in CXCallObserver().calls {
if call.hasEnded == false {
return true
}
}
return false
}