¿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.