Nano Hash - криптовалюты, майнинг, программирование

Как использовать 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")

?

16.06.2014

  • Я не понимаю, в чем проблема. Вы пробовали? Это сработало? И просьба не удалять и не репостить вопросы. 17.06.2014
  • Моя проблема в том, что я хочу знать, правильно ли это для вызова: UIApplication.sharedApplication (). OpenURL (NSURL (string: 9809088798) Потому что у меня есть только эмулятор, чтобы попробовать его 17.06.2014

Ответы:


1

Я почти уверен, что вы хотите:

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

(обратите внимание, что в тексте вопроса вы указываете tel//:, а не tel://).

Строка NSURL init ожидает правильно сформированный URL. Это не превратит набор цифр в телефонный номер. Иногда вы видите обнаружение номера телефона в UIWebView, но это делается на более высоком уровне, чем NSURL.

РЕДАКТИРОВАТЬ: Добавлено! за комментарий ниже

16.06.2014
  • Просто крошечная коррекция UIApplication.sharedApplication (). OpenURL (NSURL (string: tel: // 9809088798)!) Вам нужно использовать! после NSURL, потому что он возвращает необязательный. 06.08.2015
  • это начнет напрямую звонить по номеру (конечно, после 10.3 iOS запросит разрешение на звонок), но что, если мне нужно открыть номеронабиратель iPhone с заполненным номером ?? Могу ли я этого добиться? 11.12.2017
  • Отличный ответ, сэр :) 23.07.2019

  • 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") для совершения звонка.

    25.04.2015
  • Проблема в том, что ваше решение не возвращается в приложение после завершения телефонного звонка на iOS7. 19.06.2015
  • Хм, любопытно, есть ли решение, которое делает это ... может быть ограничение на iOS. 19.06.2015

  • 3

    Для Swift в iOS:

    var url:NSURL? = NSURL(string: "tel://9809088798")
    UIApplication.sharedApplication().openURL(url!)
    
    13.11.2014
  • это начнет напрямую звонить по номеру (конечно, после 10.3 iOS будет запрашивать разрешение на звонок), но что, если мне нужно открыть номеронабиратель iPhone с заполненным номером ?? Могу ли я этого добиться? 11.12.2017

  • 4

    Вам нужно не забыть удалить пробелы, иначе это не сработает:

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

    «telprompt: //» предложит пользователю позвонить или отменить, в то время как «tel: //» позвонит напрямую.

    31.03.2016

    5

    @ confile:

    Проблема в том, что ваше решение не возвращается в приложение после завершения телефонного звонка на iOS7. - 19 июня в 13:50

    & @ Зорайр

    Хм, любопытно, есть ли решение, которое делает это ... может быть ограничение на iOS.

    использовать

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

    Вы получите приглашение «Позвонить / Отменить», но оно вернется в ваше приложение. AFAIK нет возможности вернуться (без запроса)

    24.09.2015

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

    7

    Небольшое обновление для Swift 3

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

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

    9

    Чтобы позвонить в Swift 5.1, просто используйте следующий код: (я тестировал его в Xcode 11)

    let phone = "1234567890"
    if let callUrl = URL(string: "tel://\(phone)"), UIApplication.shared.canOpenURL(callUrl) {
         UIApplication.shared.open(callUrl)
    }
    

    Изменить: для Xcode 12.4, swift 5.3, просто используйте следующее:

    UIApplication.shared.open(NSURL(string: "tel://555-123-1234")! as URL)
    

    Убедитесь, что вы импортируете UIKit, иначе он скажет, что не может найти UIApplication в области видимости.

    16.07.2020

    10

    Для 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);
                }
            }
    
    25.05.2017

    11

    Для быстрого 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)
    
    26.04.2018

    12

    Swift 4 и выше

    let dialer = URL(string: "tel://5028493750")
        if let dialerURL = dialer {
            UIApplication.shared.open(dialerURL)
    }
    
    02.10.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..