J'ai converti le code pour passer un appel téléphonique d'Objective-C à Swift, mais dans Objective-C, nous pouvons définir le type de l'URL que nous aimons ouvrir (par exemple, téléphone, SMS, Web) de la manière suivante:
@"tel:xx"
@"mailto:[email protected]"
@"http://stackoverflow.com"
@"sms:768number"
Le code dans Swift est:
UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")
J'ai lu que je n'ai publié aucun paramètre de schéma pour tel:
, mais je ne sais pas si Swift peut détecter si la chaîne sert à passer un appel téléphonique, à envoyer un courrier électronique ou à ouvrir un site Web. Ou puis-je écrire:
(string : "tel//:9809088798")
?
Je suis sûr que tu veux:
UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
(notez que dans le texte de votre question, vous avez mis tel//:
, ne pas tel://
).
La chaîne init de NSURL attend une URL bien formée. Cela ne transformera pas un tas de numéros en un numéro de téléphone. Vous voyez parfois la détection de numéro de téléphone dans UIWebView, mais cela se fait à un niveau supérieur à celui de NSURL.
EDIT: ajouté! par commentaire ci-dessous
Une solution autonome 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);
}
}
}
Vous devriez maintenant pouvoir utiliser callNumber("7178881234")
pour passer un appel.
Pour Swift sous iOS:
var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
N'oubliez pas de supprimer les espaces, sinon cela ne fonctionnera pas:
if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") {
UIApplication.sharedApplication().openURL(telelphoneURL)
}
"telprompt: //" invitera l'utilisateur à appeler ou à annuler tandis que "tel: //" appellera directement.
@ confile:
Le problème est que votre solution ne revient pas à l'application une fois l'appel téléphonique terminé sur iOS7. - 19 juin à 13h50
& @ Zorayr
Hm, curieux de savoir s'il existe une solution qui le fasse .. pourrait être une restriction sur iOS.
utilisation
UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)
Vous obtiendrez une invite à appeler/annuler, mais celle-ci reviendra à votre application. Autant que je sache, il n'y a aucun moyen de revenir (sans demander)
Petite mise à jour à Swift 3
UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
Vous devez insérer "+"\est une autre façon
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);
}
}
}
L'extrait de code suivant peut indiquer si la carte SIM est présente ou non, et si le périphérique est capable de passer l'appel et s'il est d'accord, l'appel sera passé.
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
}
Pour 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)")
}
}
}
Ensuite, utilisez la fonction:
let phoneNumber = "tel://+132342424"
call(phoneNumber: phoneNumber)
Pour Swift 3
if let phoneCallURL:URL = URL(string:"tel://\(phoneNumber ?? "")") {
let application:UIApplication = UIApplication.shared
if (application.canOpenURL(phoneCallURL)) {
application.open(phoneCallURL, options: [:], completionHandler: nil);
}
}