2011-02-08 15 views
124

¿Cómo puedo hacer una llamada telefónica mediante programación en el iPhone? He probado el siguiente código pero no pasó nada:Hacer una llamada telefónica mediante programación

NSString *phoneNumber = mymobileNO.titleLabel.text; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]]; 
+2

para el código de rápida puede seguir esta respuesta http://stackoverflow.com/a/29869456/3950397 –

Respuesta

179

Probablemente el valormymobileNO.titleLabel.text no incluye el esquema tel: //

El código debería tener este aspecto:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]]; 
+3

no hay posibilidad de que podamos volver a la aplicación original con este enfoque. –

+4

Creo que el enfoque de Mellon es mejor, ya que pide al usuario en primer lugar, y luego vuelve a su aplicación después de la llamada. Sólo asegúrese de usar canOpenURL: Repliegue y al tel: pronta desde telprompt no es oficial y podría ser eliminado en una futura versión de IOS. –

+0

¿Cómo puedo hacer una llamada desde Apple Watch? –

214

para volver a la aplicación original se puede utilizar telprompt: // en lugar de tel: // - la pronta tell le pedirá al usuario en primer lugar, pero cuando se termina la llamada va a volver a su ap P:

NSString *phoneNumber = [@"telprompt://" stringByAppendingString:mymobileNO.titleLabel.text]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]]; 
+9

tengo una pregunta: ¿El aplicaciones que utilizan telprompt: // ser rechazada por Apple? –

+7

Sé que esto es antiguo, pero encontré un par de personas que afirmaron que sus aplicaciones fueron aprobadas usando telprompt: "He enviado mi aplicación que utiliza telprompt con la aplicación compartida sin el uiwebkit y ha sido aprobada por Apple. respondió 19 de enero , 2013 Pablo Alejandro Junge " –

+1

telprompt: // no está documentado y, por lo tanto, nunca se debe confiar en él. Las cosas pueden cambiar, por ejemplo, Apple podría decidir si un esquema de URL determinado es algo que necesita exclusivamente o simplemente no desea permitir, entonces su aplicación se romperá. – DevC

8

Si está utilizando Xamarin para desarrollar una aplicación iOS, aquí es el equivalente C# para hacer una llamada telefónica dentro de su aplicación:

string phoneNumber = "1231231234"; 
NSUrl url = new NSUrl(string.Format(@"telprompt://{0}", phoneNumber)); 
UIApplication.SharedApplication.OpenUrl(url); 
3

El equivalente de Java RoboVM:

public void dial(String number) 
{ 
    NSURL url = new NSURL("tel://" + number); 
    UIApplication.getSharedApplication().openURL(url); 
} 
6

Las respuestas aquí están perfectamente trabajando. Solo estoy convirtiendo la respuesta de Craig Mellon a Swift. Si alguien viene en busca de una respuesta rápida, esto los ayudará.

var phoneNumber: String = "telprompt://".stringByAppendingString(titleLabel.text!) // titleLabel.text has the phone number. 
     UIApplication.sharedApplication().openURL(NSURL(string:phoneNumber)!) 
+0

también puede usar tel: // en lugar de telprompt: // – Shivaay

+0

deje phoneNumber: String = "telprompt: // \ (titleLabel.text)" UIApplication.shared.openURL (URL (string: phoneNumber)!) – tspentzas

19

La fusión de las respuestas de @Cristian Radu y @Craig Mellon, y el comentario de @ joel.d, que debe hacer:

NSString *phoneNumber = mymobileNO.titleLabel.text; 
NSURL *phoneUrl = [NSURL URLWithString:[@"telprompt://" stringByAppendingString:phoneNumber]]; 
NSURL *phoneFallbackUrl = [NSURL URLWithString:[@"tel://" stringByAppendingString:phoneNumber]]; 

if ([UIApplication.sharedApplication canOpenURL:phoneUrl]) { 
    [UIApplication.sharedApplication openURL:phoneUrl]; 
} else if ([UIApplication.sharedApplication canOpenURL:phoneFallbackUrl]) { 
    [UIApplication.sharedApplication openURL:phoneFallbackUrl]; 
} else { 
    // Show an error message: Your device can not do phone calls. 
} 

Esto primero intentará utilizar el "telprompt:// "URL, y si eso falla, usará la URL" tel: // ". Si ambas fallas, estás tratando de hacer una llamada telefónica en un iPad o iPod Touch.

+0

Gracias tú. Está funcionando bien. – Raja

1
let phone = "tel://\("1234567890")"; 
let url:NSURL = NSURL(string:phone)!; 
UIApplication.sharedApplication().openURL(url); 
2

Swift 3

let phoneNumber: String = "tel://3124235234" 
UIApplication.shared.openURL(URL(string: phoneNumber)!) 
2

Probamos la opción Swift 3 anterior, pero no funcionó. Creo que se necesita lo siguiente si va a correr contra iOS 10+ en Swift 3:

Swift 3 (IOS 10+):

let phoneNumber = mymobileNO.titleLabel.text  
UIApplication.shared.open(URL(string: phoneNumber)!, options: [:], completionHandler: nil) 
0

En Swift 3.0,

static func callToNumber(number:String) { 

     let phoneFallback = "telprompt://\(number)" 
     let fallbackURl = URL(string:phoneFallback)! 

     let phone = "tel://\(number)" 
     let url = URL(string:phone)! 

     let shared = UIApplication.shared 

     if(shared.canOpenURL(fallbackURl)){ 
      shared.openURL(fallbackURl) 
     }else if (shared.canOpenURL(url)){ 
      shared.openURL(url) 
     }else{ 
      print("unable to open url for call") 
     } 

    } 
Cuestiones relacionadas