IOS Как проверить, действительно ли на телефоне
Я смотрю вокруг, и все, что я могу найти, это проверить callState CTCallCenter. Однако это работает, слушая событие, которое в зависимости от того, активно/приостановлено/возобновлено приложение, событие может быть поднято в разное время.
Мне нужно, а не слушать событие, и мне сказали, когда звонок подключен, я хочу решить, когда спросить, подключен ли вызов.
Случай использования: когда телефонный звонок подключен - пользователь знает и всегда будет нажимать на значок приложения, который откроет приложение. В это время я просто хочу запустить быструю функцию, чтобы проверить, есть ли сейчас вызов или нет.
Возможно ли это?
Ответы
Ответ 1
Объект CTCallCenter
имеет свойство currentCalls
, которое представляет собой NSSet
текущих вызовов. Если есть вызов, то свойство currentCalls
должно быть!= Nil.
Если вы хотите узнать, действительно ли подключен какой-либо из вызовов, вам нужно будет выполнять итерацию по текущим вызовам и проверить callState
, чтобы определить, есть ли это CTCallStateConnected
или нет.
Ответ 2
#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;
}
Ответ 3
Спасибо за ответ 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
}
}
}
}