Pregunta

¿Cómo puedo hacer una llamada desde dentro de una aplicación o lanzar una aplicación inmediatamente después de que termine la llamada? Sé que esto es posible debido a que algunas aplicaciones en la tienda de aplicaciones ya están haciendo esto.

¿Fue útil?

Solución

Tengo este código desde el sitio de Apple y funciona perfectamente:

-(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];
}


}

Otros consejos

Creo que hay dos partes a este

  1. La aplicación ya está en marcha, y el usuario recibe un aviso que indica una llamada está entrando, y pidió a aceptar o rechazar
  2. El usuario recibe una llamada telefónica, pero la aplicación no se está ejecutando

En el primer caso, el UIApplicationDelegate recibirá mensajes application:willChangeStatusBarFrame:, application:didChangeStatusBarFrame:, applicationWillResignActive: y applicationDidBecomeActive: todos potencialmente varias veces todo dependiendo de si los elegidos por el usuario para responder la llamada o no, y posiblemente applicationWillTerminate: si deciden deje su aplicación o no. También se puede observar estos eventos utilizando el NSNotificationCenter de una clase que no está registrada como el delegado de aplicación, consulte la sección 'Notificaciones' de la UIApplication referencia de clase para los detalles.

En el segundo caso, no sé que hay de distancia con el SDK oficial para lanzar su aplicación cuando finaliza una llamada telefónica. Podría dar una lista de las aplicaciones que hacen esto?

EDIT:

Creo que entiendo lo que quiere decir ahora. Debe seguir el consejo de @jessecurry, la openURL en UIApplication con un protocolo tel: va a hacer una llamada telefónica. En cuanto a su pretensión de "hacer lo imposible" y no salir de la aplicación cuando se hace la llamada telefónica, no estoy seguro de cómo lo hicieron porque yo no lo escribí. Ellos podrían estar utilizando un servicio de VoIP como Skype externa, o simplemente cargar la URL tel: dentro de una hoja web invisible. Ninguno de los cuales que puedo comentar porque no he probado.

Se lleva a cabo mediante el uso de telprompt en lugar de tel. por favor mirar el siguiente código

[[UIApplication sharedApplication]      openURL: [NSURL URLWithString: @ "telprompt: 18004912200"]];

Si desea realizar una llamada desde dentro de la aplicación se puede utilizar una URL tel:.

Aquí es un método que toma un número de teléfono como una cadena e inicia una llamada.

- (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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top