webentwicklung-frage-antwort-db.com.de

Wie kann ich mit openURL in Swift telefonieren?

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")

?

39
user3739367

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

76
Lou Franco

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.

16
Zorayr

Für Swift in iOS:

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

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.

6
Robert Wagstaff

@ 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)

5
Glenn

Kleines Update auf Swift 3

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

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);
    }
  }
}
4
Mauricio Lucon

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  
    }
2
Durai Amuthan.H

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)
0
wieblinger

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);
            }
        }
0
Arshad