Gọi điện thoại theo chương trình


138

Làm cách nào để gọi điện thoại theo chương trình trên iPhone? Tôi đã thử mã sau đây nhưng không có gì xảy ra:

NSString *phoneNumber = mymobileNO.titleLabel.text;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];

2
Để biết mã trong swift, bạn có thể làm theo câu trả lời này stackoverflow.com/a/29869456/3950397
Sahil Kapoor

Câu trả lời:


189

Có lẽ giá trị mymobileNO.titleLabel.text không bao gồm lược đồ tel: //

Mã của bạn sẽ trông như thế này:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];

3
Không có cơ hội chúng ta có thể quay lại ứng dụng ban đầu với phương pháp này.
Artem Oboturov

4
Tôi nghĩ cách tiếp cận của Mellon tốt hơn vì nó nhắc người dùng trước, sau đó quay lại ứng dụng của bạn sau cuộc gọi. Chỉ cần đảm bảo sử dụng canOpenURL: và dự phòng cho dấu nhắc tel: vì telprompt không chính thức và có thể bị xóa trong phiên bản iOS trong tương lai.
joel.d

Làm thế nào tôi có thể gọi điện thoại từ apple watch.
Ahad Khan

1
Tôi có thể bật loa theo chương trình cho cuộc gọi bắt nguồn theo cách này trong ios không?
uniruddh

thậm chí tel: 1234567890 cũng hoạt động giống như cách nói: // 1234567890 nó hoạt động
Durai Amuthan.H

218

Để quay lại ứng dụng gốc, bạn có thể sử dụng telprompt: // thay vì tel: // - Dấu nhắc sẽ nhắc người dùng trước, nhưng khi cuộc gọi kết thúc, nó sẽ quay lại ứng dụng của bạn:

NSString *phoneNumber = [@"telprompt://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];

9
Tôi có một câu hỏi: các ứng dụng sử dụng telprompt: // có bị Apple từ chối không?
Smeegol

7
Tôi biết điều này đã cũ nhưng tôi đã tìm thấy một vài người tuyên bố ứng dụng của họ đã được phê duyệt bằng telprompt: "Tôi đã gửi ứng dụng của mình sử dụng telprompt với ứng dụng được chia sẻ mà không có uiwebkit và đã được apple chấp thuận thành công. Alejandro Junge "
Mark McCorkle

1
telprompt: // không có giấy tờ và do đó không bao giờ nên dựa vào. Mọi thứ có thể thay đổi, Ví dụ: Apple có thể quyết định một lược đồ URL nhất định là thứ họ cần riêng hoặc đơn giản là không muốn cho phép, sau đó ứng dụng của bạn sẽ bị hỏng.
DevC

@DevC: Vậy thì có gì thay thế để có tính năng gọi điện thoại trong ứng dụng của chúng tôi?
BaSha

@BaSha tel://không sử dụngtelprompt://
DevC

24

Hợp nhất các câu trả lời của @Cristian Radu và @Craig Mellon, và nhận xét từ @ joel.d, bạn nên làm:

NSURL *urlOption1 = [NSURL URLWithString:[@"telprompt://" stringByAppendingString:phone]];
NSURL *urlOption2 = [NSURL URLWithString:[@"tel://" stringByAppendingString:phone]];
NSURL *targetURL = nil;

if ([UIApplication.sharedApplication canOpenURL:urlOption1]) {
    targetURL = urlOption1;
} else if ([UIApplication.sharedApplication canOpenURL:urlOption2]) {
    targetURL = urlOption2;
}

if (targetURL) {
    if (@available(iOS 10.0, *)) {
        [UIApplication.sharedApplication openURL:targetURL options:@{} completionHandler:nil];
    } else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        [UIApplication.sharedApplication openURL:targetURL];
#pragma clang diagnostic pop
    }
} 

Điều này trước tiên sẽ cố gắng sử dụng URL "telprompt: //" và nếu thất bại, nó sẽ sử dụng URL "tel: //". Nếu cả hai đều thất bại, bạn đang cố gắng thực hiện cuộc gọi điện thoại trên iPad hoặc iPod Touch.

Phiên bản Swift:

let phone = mymobileNO.titleLabel.text
let phoneUrl = URL(string: "telprompt://\(phone)"
let phoneFallbackUrl = URL(string: "tel://\(phone)"
if(phoneUrl != nil && UIApplication.shared.canOpenUrl(phoneUrl!)) {
  UIApplication.shared.open(phoneUrl!, options:[String:Any]()) { (success) in
    if(!success) {
      // Show an error message: Failed opening the url
    }
  }
} else if(phoneFallbackUrl != nil && UIApplication.shared.canOpenUrl(phoneFallbackUrl!)) {
  UIApplication.shared.open(phoneFallbackUrl!, options:[String:Any]()) { (success) in
    if(!success) {
      // Show an error message: Failed opening the url
    }
  }
} else {
    // Show an error message: Your device can not do phone calls.
}

10

Các câu trả lời ở đây là hoàn hảo. Tôi chỉ chuyển đổi câu trả lời của Craig Mellon sang Swift. Nếu ai đó đến tìm kiếm câu trả lời nhanh chóng, điều này sẽ giúp họ.

 var phoneNumber: String = "telprompt://".stringByAppendingString(titleLabel.text!) // titleLabel.text has the phone number.
        UIApplication.sharedApplication().openURL(NSURL(string:phoneNumber)!)

bạn cũng có thể sử dụng tel: // thay cho telprompt: //
Shivaay

let phoneNumber: String = "telprompt: // (titleLabel.text)" UIApplication. Shared.openURL (URL (chuỗi: phoneNumber)!)
tspentzas

8

Nếu bạn đang sử dụng Xamarin để phát triển ứng dụng iOS, thì đây là C # tương đương để thực hiện cuộc gọi điện thoại trong ứng dụng của bạn:

string phoneNumber = "1231231234";
NSUrl url = new NSUrl(string.Format(@"telprompt://{0}", phoneNumber));
UIApplication.SharedApplication.OpenUrl(url);

6

Swift 3

let phoneNumber: String = "tel://3124235234"
UIApplication.shared.openURL(URL(string: phoneNumber)!)

4

Trong Swift 3.0,

static func callToNumber(number:String) {

        let phoneFallback = "telprompt://\(number)"
        let fallbackURl = URL(string:phoneFallback)!

        let phone = "tel://\(number)"
        let url = URL(string:phone)!

        let shared = UIApplication.shared

        if(shared.canOpenURL(fallbackURl)){
            shared.openURL(fallbackURl)
        }else if (shared.canOpenURL(url)){
            shared.openURL(url)
        }else{
            print("unable to open url for call")
        }

    }

3

Tương đương RoboVM của Java:

public void dial(String number)
{
  NSURL url = new NSURL("tel://" + number);
  UIApplication.getSharedApplication().openURL(url);
}

3

Đã thử tùy chọn Swift 3 ở trên, nhưng nó không hoạt động. Tôi nghĩ bạn cần những điều sau nếu bạn chạy với iOS 10+ trên Swift 3:

Swift 3 (iOS 10+):

let phoneNumber = mymobileNO.titleLabel.text       
UIApplication.shared.open(URL(string: phoneNumber)!, options: [:], completionHandler: nil)

1
let phone = "tel://\("1234567890")";
let url:NSURL = NSURL(string:phone)!;
UIApplication.sharedApplication().openURL(url);

1

Nhanh

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

0

'openURL:' không dùng nữa: lần đầu tiên không dùng nữa trong iOS 10.0 - Vui lòng sử dụng openURL: tùy chọn: xongHandler: thay vào đó

trong Objective-c iOS 10+ sử dụng:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber] options:@{} completionHandler:nil];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.