iPhone SDK: lançar um aplicativo após o término da chamada
-
22-09-2019 - |
Pergunta
Como eu faria uma chamada de dentro de um aplicativo ou lançaria um aplicativo imediatamente após o término da chamada? Eu sei que isso é possível porque alguns aplicativos na App Store já estão fazendo isso.
Solução
Recebi este código no site da Apple e funciona perfeitamente:
-(IBAction) dialNumber:(id)sender{
NSString *aPhoneNo = [@"tel://" stringByAppendingString:[itsPhoneNoArray objectAtIndex:[sender tag]]] ; NSURL *url= [NSURL URLWithString:aPhoneNo];
NSURL *url= [NSURL URLWithString:aPhoneNo];
NSString *osVersion = [[UIDevice currentDevice] systemVersion];
if ([osVersion floatValue] >= 3.1) {
UIWebView *webview = [[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
[webview loadRequest:[NSURLRequest requestWithURL:url]];
webview.hidden = YES;
// Assume we are in a view controller and have access to self.view
[self.view addSubview:webview];
[webview release];
} else {
// On 3.0 and below, dial as usual
[[UIApplication sharedApplication] openURL: url];
}
}
Outras dicas
Eu acho que há duas partes nisso
- O aplicativo já está em execução e o usuário recebe um prompt indicando que uma ligação está chegando e solicitada a aceitar ou rejeitar
- O usuário recebe uma ligação, mas o aplicativo não está em execução
No primeiro caso, seu UiapplicationDelegate receberá mensagens application:willChangeStatusBarFrame:
, application:didChangeStatusBarFrame:
, applicationWillResignActive:
, e applicationDidBecomeActive:
tudo potencialmente várias vezes, dependendo se o usuário optar por atender à chamada ou não, e possivelmente applicationWillTerminate:
Se eles optarem por deixar seu aplicativo ou não. Você também pode observar esses eventos usando o NSNotificationCenter De uma classe que não está registrada como delegado de aplicativo, consulte a seção "Notificações" do Uiapplication Referência de classe para detalhes.
No segundo caso, não sei que há o SDK oficial para lançar seu aplicativo quando um telefonema terminar. Você poderia fornecer uma lista dos aplicativos que fazem isso?
EDITAR:
Acho que entendo o que você quer dizer agora. Você deve seguir o conselho de @jessecurry, o openURL
sobre UIApplication
com um tel:
O protocolo fará uma ligação. Quanto à reivindicação de "fazer o impossível" e não deixar o aplicativo quando o telefonema é feito, não tenho certeza de como eles fizeram isso porque não escrevi. Eles poderiam estar usando um serviço de VoIP externo como o Skype ou simplesmente carregando o tel:
URL dentro de uma folha de web invisível. Nenhum dos quais posso comentar porque não tentei.
Isso é feito usando o telprompt em vez de tel. Por favor, veja o seguinte código
[UIApplication sharedApplication] OpenUrl: [NSURL URLWITHSTRING:@"TELPROMPT: 18004912200"]];
Se você quiser fazer uma chamada de dentro do seu aplicativo, você pode usar um tel:
url.
Aqui está um método que pega um número de telefone como string e inicia uma chamada.
- (void)dialNumber: (NSString*)telNumber
{
// fix telNumber NSString
NSArray* telComponents = [telNumber componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
telNumber = [telComponents componentsJoinedByString: @""];
NSString* urlString = [NSString stringWithFormat: @"tel:%@", telNumber];
NSURL* telURL = [NSURL URLWithString: urlString];
//NSLog( @"Attempting to dial %@ with urlString: %@ and URL: %@", telNumber, urlString, telURL );
if ( [[UIApplication sharedApplication] canOpenURL: telURL] )
{
[[UIApplication sharedApplication] openURL: telURL];
}
else
{
UIAlertView* alert = [[UIAlertView alloc] initWithTitle: NSLocalizedString( @"Dialer Error", @"" )
message: [NSString stringWithFormat: NSLocalizedString( @"There was a problem dialing %@.", @"" ), telNumber]
delegate: nil
cancelButtonTitle: NSLocalizedString( @"OK", @"" )
otherButtonTitles: nil];
[alert show];
[alert release];
}
}