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.

Foi útil?

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

  1. 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
  2. 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];
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top