Как использовать openURL для совершения телефонного звонка в Swift?
я преобразовал код для совершения телефонного звонка из Objective-C в Swift, но в Objective-C мы можем установить тип URL-адреса, который мы хотели бы открыть (например, телефон, SMS, веб), как это:
@"tel:xx"
@"mailto:info@example.es"
@"http://stackoverflow.com"
@"sms:768number"
код в Swift:
UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")
Я читал, что не выпустили ни одного параметра схемы для tel:
, но я не знаю, Может ли Swift определить, предназначена ли строка для телефонного звонка, отправки электронной почты или открытия веб-сайта. Или я могу ... пиши:
(string : "tel//:9809088798")
?
11 ответов
Я уверен, что вы хотите:
UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
(обратите внимание, что в тексте вашего вопроса Вы ставите tel//:
, а не tel://
).
строка init NSURL ожидает хорошо сформированный URL-адрес. Это не превратит кучу номеров в телефонный номер. Иногда вы видите обнаружение номера телефона в UIWebView, но это делается на более высоком уровне, чем NSURL.
EDIT: добавлено ! за комментарий ниже
автономное решение в Свифт:
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")
чтобы позвонить.
для Swift в iOS:
var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
вы должны помнить, чтобы удалить пробелы или он не будет работать:
if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") {
UIApplication.sharedApplication().openURL(telelphoneURL)
}
"telprompt://" будет предлагать пользователю, чтобы позвонить или отмены, а "тел.://" будет звонить напрямую.
@ confile:
проблема в том, что ваше решение не вернуться в приложение после телефонный звонок был закончен на iOS7. – 19 июня в 13:50
& @ Zorayr
HM, любопытно, есть ли решение, которое это делает.. может быть ограничение на iOS.
использовать
UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)
вы получите приглашение позвонить / отменить, но он возвращается в ваше приложение. AFAIK нет способа вернуться (без подсказки)
вы должны вставить " + " \ is another way
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);
}
}
}
небольшое обновление до Swift 3
UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
следующий фрагмент кода может сказать, есть ли 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
}
для 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);
}
}
для 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)")
}
}
}
затем используйте функцию:
let phoneNumber = "tel://+132342424"
call(phoneNumber: phoneNumber)
тот же ответ в Swift 4.2
func dialNumber(number : String) {
if let url = URL(string: "tel://\(number)"),
UIApplication.shared.canOpenURL(url) {
if #available(iOS 10, *) {
UIApplication.shared.open(url, options: [:], completionHandler:nil)
} else {
UIApplication.shared.openURL(url)
}
} else {
// add error message here
}
}
называй это как ниже
dialNumber(number: "+921111111222")