Как использовать openURL для совершения телефонного звонка в Swift?
Я преобразовал код для совершения телефонного звонка с Objective-C в Swift, но в Objective-C мы можем установить тип URL-адреса, который мы хотели бы открыть (например, телефон, SMS, сеть), например:
@"tel:xx"
@"mailto:[email protected]"
@"http://stackoverflow.com"
@"sms:768number"
Код в Swift:
UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")
Я прочитал, что не выписал какой-либо параметр схемы для tel:
, но я не знаю, может ли Swift определить, является ли строка для совершения телефонного звонка, отправки электронной почты или открытия веб-сайта. Или я могу написать:
(string : "tel//:9809088798")
?
Ответы
Ответ 1
Я уверен, что вы хотите:
UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
(обратите внимание, что в тексте вопроса вы помещаете tel//:
, а не tel://
).
Строковый init NSURL ожидает корректный URL. Он не превратит кучу номеров в номер телефона. Иногда вы видите обнаружение номера телефона в UIWebView, но это делается на более высоком уровне, чем NSURL.
EDIT: Добавлено! за комментарий ниже
Ответ 2
Самостоятельное решение в 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);
}
}
}
Теперь вы можете использовать callNumber("7178881234")
для совершения вызова.
Ответ 3
Для Swift в iOS:
var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
Ответ 4
@confile:
Проблема заключается в том, что ваше решение не возвращается в приложение после телефонный звонок был завершен на iOS7. - 19 июня в 13:50
& @Zorayr
Hm, любопытно, есть ли решение, которое делает это.. может быть ограничение на iOS.
использовать
UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)
Появится приглашение на вызов/Отмена, но оно вернется в ваше приложение. AFAIK нет возможности вернуться (без подсказки)
Ответ 5
Вам нужно помнить об удалении пробелов или не будет работать:
if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") {
UIApplication.sharedApplication().openURL(telelphoneURL)
}
"telprompt://" предложит пользователю позвонить или отменить, пока "tel://" вызовет напрямую.
Ответ 6
Вы должны вставить "+" \другой путь
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);
}
}
}
Ответ 7
Небольшое обновление до Swift 3
UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
Ответ 8
Следующий фрагмент кода может определить, есть ли SIM-карта или нет, и если устройство способно выполнить вызов, и если оно нормально, то он сделает вызов
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
}
Ответ 9
Для быстрого 3
if let phoneCallURL:URL = URL(string:"tel://\(phoneNumber ?? "")") {
let application:UIApplication = UIApplication.shared
if (application.canOpenURL(phoneCallURL)) {
application.open(phoneCallURL, options: [:], completionHandler: nil);
}
}