Programlı olarak telefon görüşmesi yapın


Yanıtlar:


189

Muhtemelen mymobileNO.titleLabel.text değeri tel: // şemasını içermiyor

Kodunuz şöyle görünmelidir:

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

3
Bu yaklaşımla orijinal uygulamaya geri dönme şansımız yok.
Artem Oboturov

4
Bence Mellon'un yaklaşımı, önce kullanıcıyı yönlendiren ve daha sonra çağrıdan sonra uygulamanıza geri döndüğü için daha iyi olduğunu düşünüyorum. Telprompt resmi olmadığından ve gelecekteki bir iOS sürümünde kaldırılabileceğinden canOpenURL: ve tel: istemine geri döndüğünüzden emin olun.
joel.d

Apple Watch'tan nasıl telefon görüşmesi yapabilirim?
Ahad Khan

1
İos olarak bu şekilde yapılan aramalar için hoparlörü programlı olarak açabilir miyim?
uniruddh

hatta tel: 1234567890 da nasıl söylediği gibi çalışır : // 1234567890 işe yarıyor
Durai Amuthan.H

218

Orijinal uygulamaya geri dönmek için tel: // yerine telprompt: // kullanabilirsiniz.

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

9
Bir sorum var: telprompt: // kullanan uygulamalar Apple tarafından reddedilecek mi?
Smeegol

7
Bunun eski olduğunu biliyorum, ancak uygulamalarının telprompt kullanılarak onaylandığını iddia eden birkaç kişi buldum: "uiwebkit olmadan paylaşılan uygulama ile telprompt kullanan uygulamamı gönderdim ve elma tarafından başarıyla onaylandı. 19 Ocak 2013 Pablo Alejandro Junge "
Mark McCorkle

1
telprompt: // belgesizdir ve bu nedenle asla güvenilmemelidir. İşler değişebilir, Örneğin Apple belirli bir URL şemasının özel olarak ihtiyaç duydukları bir şey olduğuna veya sadece izin vermek istemediğine karar verebilir, ardından uygulamanız kırılır.
DevC

@DevC: O zaman bizim app telefon görüşmesi özelliği için alternatif nedir?
BaSha

@BaSha use tel://nottelprompt://
DevC

24

@Cristian Radu ve @Craig Mellon'un cevaplarını ve @ joel.d'nin yorumunu birleştirerek şunları yapmalısınız:

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

Bu önce "telprompt: //" URL'sini kullanmaya çalışır ve bu başarısız olursa "tel: //" URL'sini kullanır. Her ikisi de başarısız olursa, iPad veya iPod Touch'a telefon görüşmesi yapmaya çalışıyorsunuz.

Hızlı Sürüm:

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

Buradaki cevaplar mükemmel çalışıyor. Ben sadece Craig Mellon'un cevabını Swift'e çeviriyorum. Birisi hızlı cevap aramaya gelirse, bu onlara yardımcı olacaktır.

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

ayrıca telprompt yerine tel: // kullanabilirsiniz: //
Shivaay

let phoneNumber: String = "telprompt: // (titleLabel.text)" UIApplication.shared.openURL (URL (dize: phoneNumber)!)
tspentzas

8

Bir iOS uygulaması geliştirmek için Xamarin kullanıyorsanız, uygulamanızda telefon görüşmesi yapmak için C # eşdeğeri şöyledir:

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

6

Hızlı 3

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

4

Swift 3.0'da,

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

Java RoboVM eşdeğeri:

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

3

Yukarıdaki Swift 3 seçeneğini denedim, ancak işe yaramadı. Swift 3'te iOS 10+ ile karşılaşacaksanız aşağıdakilere ihtiyacınız olduğunu düşünüyorum:

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

hızlı

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

0

'openURL:' kullanımdan kaldırıldı: ilk önce iOS 10.0'da kullanımdan kaldırıldı - Lütfen openURL: options: completionHandler: kullanın

Objective-c iOS 10+ kullanımında:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber] options:@{} completionHandler:nil];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.