2014-06-16 21 views
31

Ho convertito il codice per effettuare una chiamata da Objective-C a Swift, ma in Objective-C, possiamo impostare il tipo di URL che ci piace aprire (ad es. Telefono, SMS, web) come questo:Come utilizzare openURL per effettuare una telefonata in Swift?

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

il codice in Swift è:

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

ho letto che non hanno rilasciato alcun parametro schema per tel:, ma io non so se Swift in grado di rilevare se la stringa è per fare una telefonata , invio di email o apertura di un sito Web. O posso scrivere:

(string : "tel//:9809088798") 

?

+0

non vedo quale sia il problema. Hai provato? Ha funzionato? E per favore non cancellare e ripubblicare domande. –

+1

Il mio problema è che voglio sapere se questo è corretto per la chiamata: UIApplication.sharedApplication(). OpenURL (NSURL (stringa: "9809088798") Perché solo l'emulatore per provarlo – user3739367

risposta

66

Sono abbastanza sicuro che si desidera:

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

(notare che nel testo domanda, si mette tel//:, non tel://).

La stringa di NSURL si aspetta un URL ben formato. Non trasformerà un gruppo di numeri in un numero di telefono. A volte viene visualizzato il rilevamento del numero di telefono in UIWebView, ma viene eseguito a un livello superiore rispetto a NSURL.

MODIFICA: Aggiunto! per commento qui sotto

+0

Solo una piccola correzione UIApplication.sharedApplication(). openURL (NSURL (stringa: "tel: // 9809088798")!) è necessario utilizzare! dopo NSURL perché restituisce un optional. – Brduca

+0

questo inizierà direttamente chiamando il numero (naturalmente dopo 10.3 iOS chiederà il permesso di chiamare) ma cosa succede se ho bisogno di aprire il dialer iPhone con un numero riempito ?? Posso raggiungere questo? – Suryakant

6

per SWIFT in iOS:

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

questo inizierà direttamente chiamando il numero (naturalmente dopo 10.3 iOS chiederà il permesso di chiamare) ma cosa succede se ho bisogno di aprire il Dialer iPhone con un numero inserito ?? Posso ottenere questo? – Suryakant

14

Una soluzione self-contained 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); 
    } 
    } 
} 

ora, si dovrebbe essere in grado di utilizzare callNumber("7178881234") per effettuare una chiamata.

+0

Il problema è che la tua soluzione non ritorna all'app dopo che la telefonata è stata completata su iOS7. – confile

+0

Hm, curioso se esiste una soluzione che lo faccia .. potrebbe essere una restrizione su iOS. – Zorayr

4

È necessario inserire "+" \ è un altro modo

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); 
    } 
    } 
} 
5

@ confile:

Il problema è che la soluzione non ritorna al app dopo la chiamata telefono è stato finito su iOS7. - 19 giugno a 13:50

& @ Zorayr

Hm, curioso di sapere se c'è una soluzione che fa farlo .. potrebbe essere una restrizione su iOS.

uso

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

Si otterrà una richiesta di chiamata/interrompere ma restituisce alla propria applicazione.Per quanto ne sappia non c'è modo di tornare (senza chiedere conferma)

5

È necessario ricordarsi di togliere i spazi bianchi o non funzionerà:

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

"telprompt: //" verrà chiesto all'utente di chiamare o annullare mentre "tel: //" chiamerà direttamente.

4

Piccolo aggiornamento per Swift 3

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

Il seguente frammento di codice può dire se la SIM è lì o no e se il dispositivo è in grado di effettuare la chiamata e se ok allora ti farà la chiamata

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 
    } 
0

per 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); 
      } 
     }