Lakukan panggilan telepon secara terprogram

138

Bagaimana saya bisa melakukan panggilan telepon secara terprogram di iPhone? Saya mencoba kode berikut tetapi tidak ada yang terjadi:

NSString *phoneNumber = mymobileNO.titleLabel.text;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
pengguna564963
sumber
2
Untuk kode dalam cepat, Anda dapat mengikuti jawaban ini stackoverflow.com/a/29869456/3950397
Sahil Kapoor

Jawaban:

189

Mungkin nilai mymobileNO.titleLabel.text tidak termasuk skema tel: //

Kode Anda akan terlihat seperti ini:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
Cristian Radu
sumber
3
Tidak mungkin kami dapat kembali ke aplikasi asli dengan pendekatan ini.
Artem Oboturov
4
Saya pikir pendekatan Mellon lebih baik karena meminta pengguna terlebih dahulu, dan kemudian kembali ke aplikasi Anda setelah panggilan. Pastikan untuk menggunakan canOpenURL: dan mundur ke prompt tel: karena telprompt tidak resmi dan dapat dihapus di versi iOS yang akan datang.
joel.d
Bagaimana saya bisa melakukan panggilan telepon dari jam tangan apel.
Ahad Khan
1
Dapatkah saya mengaktifkan speaker secara terprogram untuk panggilan berasal dengan cara ini di ios?
uniruddh
bahkan tel: 1234567890 juga berfungsi seperti cara kirim: // 1234567890 berfungsi
Durai Amuthan.H
218

Untuk kembali ke aplikasi asli, Anda dapat menggunakan telprompt: // alih-alih tel: // - Prompt Tell akan meminta pengguna terlebih dahulu, tetapi ketika panggilan selesai akan kembali ke aplikasi Anda:

NSString *phoneNumber = [@"telprompt://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
Craig Mellon
sumber
9
Saya punya pertanyaan: apakah aplikasi yang menggunakan telprompt: // ditolak oleh Apple?
Smeegol
7
Saya tahu ini sudah tua tetapi saya menemukan beberapa orang yang mengklaim aplikasi mereka disetujui menggunakan telprompt: "Saya telah mengirimkan aplikasi saya yang menggunakan telprompt dengan aplikasi bersama tanpa uiwebkit dan telah berhasil disetujui oleh apple. Jawab 19 Januari 2013 Pablo Alejandro Junge "
Mark McCorkle
1
telprompt: // tidak berdokumen dan karenanya tidak boleh diandalkan. Hal-hal dapat berubah, Misalnya Apple dapat memutuskan skema URL yang diberikan adalah sesuatu yang mereka butuhkan secara eksklusif atau tidak ingin diizinkan, maka aplikasi Anda akan rusak.
DevC
@DevC: Lalu apa alternatif untuk memiliki fitur panggilan telepon di aplikasi kita?
BaSha
@BaSha gunakan tel://tidaktelprompt://
DevC
24

Menggabungkan jawaban dari @Cristian Radu dan @Craig Mellon, dan komentar dari @ joel.d, Anda harus melakukan:

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

Ini pertama-tama akan mencoba menggunakan URL "telprompt: //", dan jika gagal, ia akan menggunakan URL "tel: //". Jika keduanya gagal, Anda mencoba melakukan panggilan telepon di iPad atau iPod Touch.

Versi 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.
}
Guillaume Boudreau
sumber
10

Jawaban di sini berfungsi dengan baik. Saya baru saja mengubah jawaban Craig Mellon ke Swift. Jika seseorang datang mencari jawaban cepat, ini akan membantu mereka.

 var phoneNumber: String = "telprompt://".stringByAppendingString(titleLabel.text!) // titleLabel.text has the phone number.
        UIApplication.sharedApplication().openURL(NSURL(string:phoneNumber)!)
Shivaay
sumber
Anda juga dapat menggunakan tel: // di tempat telprompt: //
Shivaay
biarkan phoneNumber: String = "telprompt: // (titleLabel.text)" UIApplication.shared.openURL (URL (string: phoneNumber)!)
tspentzas
8

Jika Anda menggunakan Xamarin untuk mengembangkan aplikasi iOS, berikut ini adalah setara C # untuk melakukan panggilan telepon di dalam aplikasi Anda:

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

Cepat 3

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

Di 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")
        }

    }
Rohit Pathak
sumber
3

Setara dengan Java RoboVM:

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

Sudah mencoba opsi Swift 3 di atas, tetapi tidak berhasil. Saya pikir Anda perlu yang berikut ini jika ingin menjalankan iOS 10+ di Swift 3:

Swift 3 (iOS 10+):

let phoneNumber = mymobileNO.titleLabel.text       
UIApplication.shared.open(URL(string: phoneNumber)!, options: [:], completionHandler: nil)
Charlie Seligman
sumber
1
let phone = "tel://\("1234567890")";
let url:NSURL = NSURL(string:phone)!;
UIApplication.sharedApplication().openURL(url);
Himali Shah
sumber
1

Cepat

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

'openURL:' sudah tidak digunakan lagi: sudah tidak digunakan lagi di iOS 10.0 - Silakan gunakan openURL: opsi: completionHandler: sebagai gantinya

dalam penggunaan Objective-c iOS 10+:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber] options:@{} completionHandler:nil];
BoSoud
sumber