দ্রুত ফোন নম্বর কল করা হচ্ছে


90

আমি একটি নম্বর নির্দিষ্ট নম্বর ব্যবহার না করে কল করতে চেষ্টা করছি তবে এমন একটি নম্বর যা ভেরিয়েবেলে ডাকা হচ্ছে বা কমপক্ষে আপনার ফোনে নম্বরটি টানতে বলুন। এই নম্বরটি যা একটি ভেরিয়েবলে ডাকা হচ্ছে এটি এমন একটি নম্বর যা আমি পার্সার ব্যবহার করে বা কোনও ওয়েবসাইট স্কুএল থেকে দখল করে পুনরুদ্ধার করেছি। একটি ফাংশন সহ ভেরিয়েবলের মধ্যে থাকা ফোন নম্বরটি কল করার চেষ্টা করে আমি একটি বোতাম তৈরি করেছি তবে কোনও ফলসই হয়নি। কিছু ধন্যবাদ সাহায্য করবে!

    func callSellerPressed (sender: UIButton!){
 //(This is calls a specific number)UIApplication.sharedApplication().openURL(NSURL(string: "tel://######")!)

 // This is the code I'm using but its not working      
 UIApplication.sharedApplication().openURL(NSURL(scheme: NSString(), host: "tel://", path: busPhone)!)

        }

উত্তর:


193

ঠিক করার চেষ্টা করুন:

if let url = NSURL(string: "tel://\(busPhone)") where UIApplication.sharedApplication().canOpenURL(url) {
  UIApplication.sharedApplication().openURL(url)
}

ধরে নিচ্ছি যে ফোন নম্বরটি রয়েছে busPhone

NSURLএর init(string:)একটি ptionচ্ছিক প্রত্যাবর্তন, সুতরাং ব্যবহার করে if letআমরা নিশ্চিত হয়েছি যে urlএটি একটি NSURL(এবং এর NSURL?দ্বারা প্রত্যাবর্তিত হিসাবে নয় init)।


সুইফট 3 এর জন্য:

if let url = URL(string: "tel://\(busPhone)"), UIApplication.shared.canOpenURL(url) {
    if #available(iOS 10, *) {
        UIApplication.shared.open(url)
    } else {
        UIApplication.shared.openURL(url)
    }
}

আমরা আইওএস 10 বা তার পরে রয়েছি কিনা তা আমাদের খতিয়ে দেখা দরকার কারণ:

আইওএস 10.0 এ 'ওপেন URL' অবমূল্যায়ন করা হয়েছিল


এটি আমাকে অমীমাংসিত শনাক্তকারী 'ইউআরএল'র ত্রুটি দিচ্ছে - .openURL (url) এর দিকে ইশারা করে উপায় সাহায্য করার জন্য ধন্যবাদ!
টমাস মার্টিনেজ 22

এনভিএম আমি কেবল একটি চিঠি মিস করছি। ঠিক আছে তাই আমি বোতাম টিপলে কিছুই হয় না। এখানে আরও তথ্য ---------- func parserDidEndDocament (পার্সার: এনএসএক্সএমএল পার্সার!) {প্রিন্টলন (বাসফোন) অঙ্কিত আপডিকেটেড ভিউ ()}
টমাস মার্টিনেজ 22

4
আপনি কি কোনও ফোনে এটি পরীক্ষা করছেন? আমার সন্দেহ হয় যে কোনও টেল খোলার: // ইউআরএল কেবলমাত্র একটি আসল আইফোনে কাজ করবে, সিমুলেটারে নয় আইপড বা আইপ্যাডে নয়।
থমাস মুলার

হ্যাঁ আমি এটি আইফোন 4 এস বোতামে ক্লিক করে দেখছি তবে এটি আমার ফোনের একটি স্ক্যালি সার্ভার থেকে বাসফোন দ্বারা কল করা নম্বরটি টানতে পারে না। আমি যখন ফোন নম্বরটি ব্যবহার করি: // এটি ডায়াল করে।
থমাস মার্টিনেজ

4
ঠিক আছে আমি মনে করি আমি সমস্যাটি কী তা জানি তবে কীভাবে এটি ঠিক করতে হয় তা জানি না। ইউআরএল থেকে যে নম্বরটি টানা হচ্ছে ঠিক এটি এই 123 456-7890 এর মতো লেখা হয়েছে এবং এটি 1234567890 এর মতো নয় I ইউআরএলটি যেটি স্বীকৃতি দেবে তা পড়তে আমি কীভাবে টেল: // অনুবাদ করব?
থমাস মার্টিনেজ

66

একটি স্ব আইওএস 10, সমাধান অন্তর্ভুক্ত সুইফট 3 :

private func callNumber(phoneNumber:String) {

  if let phoneCallURL = URL(string: "tel://\(phoneNumber)") {

    let application:UIApplication = UIApplication.shared
    if (application.canOpenURL(phoneCallURL)) {
        application.open(phoneCallURL, options: [:], completionHandler: nil)
    }
  }
}

callNumber("7178881234")কল করার জন্য আপনার সক্ষম হওয়া উচিত ।


এটি নীচের মত ত্রুটি দেবে; "এই অ্যাপ্লিকেশনটি 3 টি স্কিফ টেলিফোনে জিজ্ঞাসা করার অনুমতি নেই" এবং এইগুলি কি সিমুলেটারে কাজ করছে?
কিরণ যধব

4
এই কোডটি সিমুলেটারে কাজ করবে না। আপনি যদি এটি পরীক্ষা করতে চান তবে এটি একটি ডিভাইস ব্যবহার করুন।
রামকৃষ্ণ

24

সুইফট 4,

private func callNumber(phoneNumber:String) {

    if let phoneCallURL = URL(string: "telprompt://\(phoneNumber)") {

        let application:UIApplication = UIApplication.shared
        if (application.canOpenURL(phoneCallURL)) {
            if #available(iOS 10.0, *) {
                application.open(phoneCallURL, options: [:], completionHandler: nil)
            } else {
                // Fallback on earlier versions
                 application.openURL(phoneCallURL as URL)

            }
        }
    }
}

13

সুইফট 3.0 এবং আইওএস 10 বা তার বেশি বয়সী

func phone(phoneNum: String) {
    if let url = URL(string: "tel://\(phoneNum)") {
        if #available(iOS 10, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url as URL)
        }
    }
}

9

ঠিক আছে আমি সহায়তা পেয়েছি এবং এটি বের করেছিলাম। ফোন নম্বরটি বৈধ না হওয়ার ক্ষেত্রে আমি একটি দুর্দান্ত সামান্য সতর্কতা ব্যবস্থা রেখেছি। আমার সমস্যাটি ছিল আমি এটিকে ডেকে বলছি তবে সংখ্যার ফাঁকা স্থান এবং অযাচিত অক্ষর যেমন ("123 456-7890") ছিল। আপনার নম্বরটি ("1234567890") হলে কেবল ইউআইএপ্লিকেশনটি কাজ করে বা গ্রহণ করে। সুতরাং আপনি মূলত কেবল সংখ্যাগুলি টানতে একটি নতুন পরিবর্তনশীল তৈরি করে স্থান এবং অবৈধ অক্ষরগুলি মুছুন। তারপরে সেই নম্বরগুলিকে ইউআইএ অ্যাপ্লিকেশন সহ কল ​​করুন।

func callSellerPressed (sender: UIButton!){
        var newPhone = ""

        for (var i = 0; i < countElements(busPhone); i++){

            var current:Int = i
            switch (busPhone[i]){
                case "0","1","2","3","4","5","6","7","8","9" : newPhone = newPhone + String(busPhone[i])
                default : println("Removed invalid character.")
            }
        }

        if  (busPhone.utf16Count > 1){

        UIApplication.sharedApplication().openURL(NSURL(string: "tel://" + newPhone)!)
        }
        else{
            let alert = UIAlertView()
            alert.title = "Sorry!"
            alert.message = "Phone number is not available for this business"
            alert.addButtonWithTitle("Ok")
                alert.show()
        }
        }

6
আমার মনে হয় আপনার '+' চিহ্নটিও মঞ্জুরি দেওয়া উচিত।
ফ্লোরিয়ান

4
অনুরোধ করার সময় # একটি চরিত্রও ব্যবহৃত হয় :)
আইওএসডিভ

9

উপরের উত্তরগুলি আংশিকভাবে সঠিক, তবে "টেল: //" দিয়ে কেবল একটি সমস্যা রয়েছে। কলটি শেষ হওয়ার পরে, এটি আমাদের অ্যাপ্লিকেশনটিতে নয়, হোমস্ক্রিনে ফিরে আসবে। "Telprompt: //" ব্যবহার করা আরও ভাল, এটি অ্যাপটিতে ফিরে আসবে।

var url:NSURL = NSURL(string: "telprompt://1234567891")!
UIApplication.sharedApplication().openURL(url)

স্পষ্টতই এটি আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করবে
টম ন্যাপেন

8

সুইফট 3, আইওএস 10

func call(phoneNumber:String) {
        let cleanPhoneNumber = phoneNumber.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")
        let urlString:String = "tel://\(cleanPhoneNumber)"
        if let phoneCallURL = URL(string: urlString) {
            if (UIApplication.shared.canOpenURL(phoneCallURL)) {
                UIApplication.shared.open(phoneCallURL, options: [:], completionHandler: nil)
            }
        }
  }

options: [:], completionHandler: nilডিফল্ট আর্গুমেন্ট, আপনি এগুলি বাদ দিতে পারেন।
টিম ভার্মিউলেন

7

আমি আমার অ্যাপ্লিকেশনটিতে এই পদ্ধতিটি ব্যবহার করছি এবং এটি ভাল কাজ করছে। আমি আশা করি এটি আপনাকেও সহায়তা করতে পারে।

func makeCall(phone: String) {
    let formatedNumber = phone.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).joinWithSeparator("")
    let phoneUrl = "tel://\(formatedNumber)"
    let url:NSURL = NSURL(string: phoneUrl)!
    UIApplication.sharedApplication().openURL(url)
}

7

সুইফ্ট 5: আইওএস> = 10.0

কেবল দৈহিক ডিভাইসে কাজ করে।

private func callNumber(phoneNumber: String) {
    guard let url = URL(string: "telprompt://\(phoneNumber)"),
        UIApplication.shared.canOpenURL(url) else {
        return
    }
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

নীচে কেউ বলেছেন যে আপনি যদি "টেল" এর পরিবর্তে "টেলপ্রম্পট" ব্যবহার করেন তবে আপনার অ্যাপ্লিকেশনটি প্রত্যাখ্যান করা হবে।
অ্যান্ডি ওয়েইনস্টেইন

@ অ্যান্ডি ওয়েইনস্টেইন এহ হয়ত তারা এটি ধরলে তবে তারা আমার
কোনওটিকেই

4

সুইফ্ট 3-এ,

if let url = URL(string:"tel://\(phoneNumber)"), UIApplication.shared.canOpenURL(url) {
     UIApplication.shared.openURL(url)
}

4

আমি নম্বর বৈধতা সহ সুইফট 3 সমাধান ব্যবহার করছি

var validPhoneNumber = ""
    phoneNumber.characters.forEach {(character) in
        switch character {
        case "0"..."9":
            validPhoneNumber.characters.append(character)
        default:
            break
        }
    }

    if UIApplication.shared.canOpenURL(URL(string: "tel://\(validNumber)")!){
        UIApplication.shared.openURL(URL(string: "tel://\(validNumber)")!)
    }

3

এটি সুইফট ২.০ দ্রষ্টব্য ব্যবহার করে @ টমের উত্তরের একটি আপডেট - এটি আমি ব্যবহার করছি পুরো কল কমপোজার ক্লাস।

class CallComposer: NSObject {

var editedPhoneNumber = ""

func call(phoneNumber: String) -> Bool {

    if phoneNumber != "" {

        for i in number.characters {

            switch (i){
                case "0","1","2","3","4","5","6","7","8","9" : editedPhoneNumber = editedPhoneNumber + String(i)
                default : print("Removed invalid character.")
            }
        }

    let phone = "tel://" + editedPhoneNumber
        let url = NSURL(string: phone)
        if let url = url {
            UIApplication.sharedApplication().openURL(url)
        } else {
            print("There was an error")
        }
    } else {
        return false
    }

    return true
 }
}

2

ওপেন ইউআরএল () আইওএস 10-এ অবচয় করা হয়েছে been এখানে নতুন সিনট্যাক্সটি রয়েছে:

if let url = URL(string: "tel://\(busPhone)") {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

4
এটি অবমূল্যায়িত হয় না। সিনট্যাক্সের পরিবর্তনটি হ'ল কারণ আপনি সুইফট ৩ ব্যবহার করছেন
হাম্মাদজফর

@ হামমাদজাফর, ওপেনআরএল (ইউআরএল) পদ্ধতিটি সত্যই অবমূল্যায়ন করা হয়েছে। এর নতুন সংস্করণটির আলাদা স্বাক্ষর রয়েছে এবং এটির নতুন নামকরণও খোলা হয়েছে (ইউআরএল: বিকল্পগুলি: সমাপ্তি
মিমিক করুন

যেহেতু সুইফট ২.৩ খুব শীঘ্রই অবমূল্যায়ন হতে চলেছে
হামাদজফর

2

অন্যান্য উত্তরগুলির মধ্যে অনেকগুলি সুইফট 5 এর জন্য কাজ করে না নীচে সুইফট 5-তে কোড আপডেট রয়েছে:

let formattedNumber = phoneNumberVariable.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "")

if let url = NSURL(string: ("tel:" + (formattedNumber)!)) {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(url as URL)
    }
}

পুনশ্চ:

  1. বেশিরভাগ উত্তর সহ, আমি ডিভাইসে প্রম্পট পেতে সক্ষম হইনি। উপরের কোডটি প্রম্পটটি সাফল্যের সাথে প্রদর্শন করতে সক্ষম হয়েছিল।
  2. টেলিফোনের পরে // নেই : বেশিরভাগ উত্তর যেমন রয়েছে। এবং এটি সূক্ষ্ম কাজ করে।

1

সুইফট 3.0 সমাধান:

let formatedNumber = phone.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "")
print("calling \(formatedNumber)")
let phoneUrl = "tel://\(formatedNumber)"
let url:URL = URL(string: phoneUrl)!
UIApplication.shared.openURL(url)

এটি '+' এবং '#'
আম্র অ্যাগ্রি

1

একটি Scanner… ব্যবহার করে বৈধ উপাদানগুলিতে ফোন নম্বর হ্রাস করার বিকল্প উপায় এখানে রয়েছে

let number = "+123 456-7890"

let scanner = Scanner(string: number)

let validCharacters = CharacterSet.decimalDigits
let startCharacters = validCharacters.union(CharacterSet(charactersIn: "+#"))

var digits: NSString?
var validNumber = ""
while !scanner.isAtEnd {
    if scanner.scanLocation == 0 {
        scanner.scanCharacters(from: startCharacters, into: &digits)
    } else {
        scanner.scanCharacters(from: validCharacters, into: &digits)
    }

    scanner.scanUpToCharacters(from: validCharacters, into: nil)
    if let digits = digits as? String {
        validNumber.append(digits)
    }
}

print(validNumber)

// +1234567890

1

দ্রুত 3.0

if let url = URL(string: "tel://\(number)"), UIApplication.shared.canOpenURL(url) {
    if #available(iOS 10, *) {
        UIApplication.shared.open(url)
    } else {
        UIApplication.shared.openURL(url)
    }
}
else {
    print("Your device doesn't support this feature.")
}

1

উপরের দিকে সুইফট 4.2 এবং এর জন্য

if let phoneCallURL = URL(string: "tel://\(01234567)"), UIApplication.shared.canOpenURL(phoneCallURL)
{
    UIApplication.shared.open(phoneCallURL, options: [:], completionHandler: nil)
}

1
let formatedNumber = phone.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "")
print("calling \(formatedNumber)")
let phoneUrl = "tel://\(formatedNumber)"
let url:URL = URL(string: phoneUrl)!
UIApplication.shared.openURL(url)

4
এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, যদিও সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না। আপনার কোডটি ব্যাখ্যামূলক মন্তব্যে ভিড় না করার চেষ্টা করুন, এটি কোড এবং ব্যাখ্যা উভয়ের পাঠযোগ্যতা হ্রাস করে!
রোহান খুদে

0

সুইফট 3.0 এবং আইওএস 10+

UIApplication.shared.openURL(url) পরিবর্তিত হয়েছিল UIApplication.shared.open(_ url: URL, options:[:], completionHandler completion: nil)

বিকল্পগুলি এবং সমাপ্তি হ্যান্ডলারটি al চ্ছিক, রেন্ডারিং:

UIApplication.shared.open(url)

https://developer.apple.com/references/uikit/uiapplication/1648685- খোলা


0

একটি সুইফ্ট ৩.১ এবং পিছনের দিকে সামঞ্জস্যপূর্ণ পদ্ধতির জন্য, এটি করুন:

@IBAction func phoneNumberButtonTouched(_ sender: Any) {
  if let number = place?.phoneNumber {
    makeCall(phoneNumber: number)
  }
}

func makeCall(phoneNumber: String) {
   let formattedNumber = phoneNumber.components(separatedBy: 
   NSCharacterSet.decimalDigits.inverted).joined(separator: "")

   let phoneUrl = "tel://\(formattedNumber)"
   let url:NSURL = NSURL(string: phoneUrl)!

   if #available(iOS 10, *) {
      UIApplication.shared.open(url as URL, options: [:], completionHandler: 
      nil)
   } else {
     UIApplication.shared.openURL(url as URL)
   }
}

0

যদি আপনার ফোন নম্বরটিতে স্পেস থাকে তবে প্রথমে সেগুলি সরিয়ে ফেলুন! তারপরে আপনি স্বীকৃত উত্তরের সমাধানটি ব্যবহার করতে পারেন ।

let numbersOnly = busPhone.replacingOccurrences(of: " ", with: "")

if let url = URL(string: "tel://\(numbersOnly)"), UIApplication.shared.canOpenURL(url) {
    if #available(iOS 10, *) {
        UIApplication.shared.open(url)
    } else {
        UIApplication.shared.openURL(url)
    }
}

এই প্রশ্নের এখন 17 টি উত্তর রয়েছে এবং এটি 3 বছরেরও বেশি পুরানো। আপনি কেন অন্য একটি উত্তর যুক্ত করা প্রয়োজন মনে করলেন?
ফোগমিস্টার

4
কারণ আমি বুঝতে পারি না যে কোনও ফোন নম্বরটিতে স্থান থাকলে এটি কেন কাজ করে না। এত নেতিবাচক হবেন না, মিস্টার মিস্টার!
কাতানোরে

অবশ্যই এটি বুঝতে। সুতরাং সংখ্যাগুলিতে ফাঁকা স্থান সম্পর্কে স্পষ্টভাবে একটি নতুন প্রশ্ন যুক্ত করুন এবং এতে আপনার নিজের উত্তর যুক্ত করুন। একটি প্রশ্ন জিজ্ঞাসা করা এবং এটি নিজেই উত্তর দেওয়াতে কোনও দোষ নেই। (যদিও, আমি বেশ নিশ্চিত যে নকল হিসাবে প্রশ্নটি বন্ধ হয়ে যাবে)।
ফোগমিস্টার

4
না, ইউআরএলটি কেন খোলা হয় না তা এখানে লোকদের বলা গুরুত্বপূর্ণ: কারণ এটি শূন্য, কারণ ফোন নম্বরটিতে স্পেস রয়েছে। আমি যা সম্মত, এটি উত্তরের চেয়ে মন্তব্য হওয়া উচিত। তবে সেখানে অনেক মন্তব্য রয়েছে।
কাতানোরে

স্পেসের উল্লেখ কি আপনাকে সাহায্য করেছিল?
ক্যাটানোরে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.