Ich habe den Code zum Tätigen eines Telefonanrufs von Objective-C in Swift konvertiert, aber in Objective-C können wir den Typ der zu öffnenden URL (z. B. Telefon, SMS, Web) folgendermaßen festlegen:
@"tel:xx"
@"mailto:[email protected]"
@"http://stackoverflow.com"
@"sms:768number"
Der Code in Swift ist:
UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")
Ich habe gelesen, dass ich keinen Schema-Parameter für tel:
Freigegeben habe, aber ich weiß nicht, ob Swift) erkennen kann, ob die Zeichenfolge zum Tätigen eines Telefonanrufs, zum Senden von E-Mails oder zum Senden von Nachrichten dient Öffnen einer Website. Oder darf ich schreiben:
(string : "tel//:9809088798")
?
Ich bin mir ziemlich sicher, dass Sie wollen:
UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
(Beachten Sie, dass Sie in Ihrem Fragetext tel//:
, nicht tel://
).
Der String init von NSURL erwartet eine wohlgeformte URL. Eine Reihe von Nummern wird nicht in eine Telefonnummer umgewandelt. In UIWebView wird manchmal die Erkennung von Telefonnummern angezeigt, dies geschieht jedoch auf einer höheren Ebene als bei NSURL.
EDIT: Hinzugefügt! per Kommentar unten
Eine in sich geschlossene Lösung in 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);
}
}
}
Jetzt sollten Sie in der Lage sein, mit callNumber("7178881234")
einen Anruf zu tätigen.
Für Swift in iOS:
var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
Sie müssen daran denken, die Leerzeichen zu entfernen, sonst funktioniert es nicht:
if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") {
UIApplication.sharedApplication().openURL(telelphoneURL)
}
"telprompt: //" fordert den Benutzer auf anzurufen oder abzubrechen, während "tel: //" direkt anruft.
@ confile:
Das Problem ist, dass Ihre Lösung nicht zur App zurückkehrt, nachdem das Telefonat unter iOS7 beendet wurde. - 19. Juni um 13:50 Uhr
& @ Zorayr
Hm, ich bin neugierig, ob es eine Lösung gibt, die das tut. Das könnte eine Einschränkung für iOS sein.
verwenden
UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)
Sie erhalten eine Aufforderung zum Anrufen/Abbrechen, die jedoch zu Ihrer Anwendung zurückkehrt. AFAIK gibt es keine Möglichkeit, zurückzukehren (ohne Aufforderung)
Kleines Update auf Swift 3
UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
Sie müssen "+" einfügen\ist eine andere Möglichkeit
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);
}
}
}
Der folgende Codeausschnitt zeigt an, ob die SIM-Karte vorhanden ist oder nicht und ob das Gerät den Anruf tätigen kann. Wenn dies in Ordnung ist, wird der Anruf getätigt
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
}
Für 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)")
}
}
}
Verwenden Sie dann die Funktion:
let phoneNumber = "tel://+132342424"
call(phoneNumber: phoneNumber)
Für 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);
}
}