swift nsurl xcode6 openurl

¿Cómo usar openURL para hacer una llamada telefónica en Swift?



nsurl xcode6 (10)

He convertido el código para hacer una llamada telefónica de Objective-C a Swift, pero en Objective-C, podemos establecer el tipo de URL que nos gusta abrir (por ejemplo, teléfono, SMS, web) de esta manera:

@"tel:xx" @"mailto:[email protected]" @"http://stackoverflow.com" @"sms:768number"

El código en Swift es:

UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")

Leí que no he publicado ningún parámetro de esquema para tel: , pero no sé si Swift puede detectar si la cadena es para hacer una llamada telefónica, enviar un correo electrónico o abrir un sitio web. O puedo escribir:

(string : "tel//:9809088798")

?


@ confile:

El problema es que su solución no regresa a la aplicación después de que la llamada telefónica haya finalizado en iOS7. - 19 de junio a las 13:50

& @ Zorayr

Hm, curioso si hay una solución que sí lo haga ... podría ser una restricción en iOS.

utilizar

UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)

Recibirá un mensaje para Llamar / Cancelar pero regresará a su aplicación. AFAIK no hay forma de regresar (sin preguntar)


Debes insertar "+" / es otra manera

private func callNumber(phoneNumber:String) { if let phoneCallURL:NSURL = NSURL(string:"tel://"+"/(phoneNumber)") { let application:UIApplication = UIApplication.sharedApplication() if (application.canOpenURL(phoneCallURL)) { application.openURL(phoneCallURL); } } }


Debes recordar eliminar los espacios en blanco o no funcionará:

if let telephoneURL = NSURL(string: "telprompt:///(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") { UIApplication.sharedApplication().openURL(telelphoneURL) }

"telprompt: //" pedirá al usuario que llame o se cancele mientras "tel: //" llamará directamente.


El siguiente fragmento de código puede indicar si la tarjeta SIM está allí o no y si el dispositivo es capaz de realizar la llamada y si está bien, hará la llamada.

var info = CTTelephonyNetworkInfo() var carrier = info.subscriberCellularProvider if carrier != nil && carrier.mobileNetworkCode == nil || carrier.mobileNetworkCode.isEqual("") { //SIM is not there in the phone } else if UIApplication.sharedApplication().canopenURL(NSURL(string: "tel://9809088798")!) { UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!) } else { //Device does not have call making capability }


Estoy bastante seguro de que quieres:

UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)

(tenga en cuenta que en el texto de su pregunta, usted pone tel//: no tel:// ).

El inicio de cadena de NSURL espera una URL bien formada. No convertirá un montón de números en un número de teléfono. A veces se ve la detección del número de teléfono en UIWebView, pero eso se hace a un nivel más alto que NSURL.

EDITAR: ¡Agregado! por comentario a continuación


Para Swift en iOS:

var url:NSURL? = NSURL(string: "tel://9809088798") UIApplication.sharedApplication().openURL(url!)


Para swift 4:

func call(phoneNumber: String) { if let url = URL(string: phoneNumber) { if #available(iOS 10, *) { UIApplication.shared.open(url, options: [:], completionHandler: { (success) in print("Open /(phoneNumber): /(success)") }) } else { let success = UIApplication.shared.openURL(url) print("Open /(phoneNumber): /(success)") } } }

Entonces, usa la función:

let phoneNumber = "tel://+132342424" call(phoneNumber: phoneNumber)


Para veloz 3

if let phoneCallURL:URL = URL(string:"tel:///(phoneNumber ?? "")") { let application:UIApplication = UIApplication.shared if (application.canOpenURL(phoneCallURL)) { application.open(phoneCallURL, options: [:], completionHandler: nil); } }


Pequeña actualización de Swift 3

UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)


Una solución autónoma en Swift :

private func callNumber(phoneNumber:String) { if let phoneCallURL:NSURL = NSURL(string:"tel:///(phoneNumber)") { let application:UIApplication = UIApplication.sharedApplication() if (application.canOpenURL(phoneCallURL)) { application.openURL(phoneCallURL); } } }

Ahora, debería poder usar callNumber("7178881234") para hacer una llamada.