Telefonisch telefonieren


138

Wie kann ich programmgesteuert auf dem iPhone telefonieren? Ich habe den folgenden Code ausprobiert, aber es ist nichts passiert:

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

2
Für Code in Swift können Sie dieser Antwort folgen stackoverflow.com/a/29869456/3950397
Sahil Kapoor

Antworten:


189

Wahrscheinlich enthält der Wert mymobileNO.titleLabel.text nicht das Schema tel: //

Ihr Code sollte folgendermaßen aussehen:

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

3
Es gibt keine Chance, dass wir mit diesem Ansatz zur ursprünglichen Anwendung zurückkehren können.
Artem Oboturov

4
Ich denke, Mellons Ansatz ist besser, da er zuerst den Benutzer auffordert und dann nach dem Anruf zu Ihrer App zurückkehrt. Stellen Sie einfach sicher, dass Sie canOpenURL: verwenden und auf die Eingabeaufforderung tel: zurückgreifen, da telprompt nicht offiziell ist und in einer zukünftigen iOS-Version entfernt werden könnte.
joel.d

Wie kann ich von Apple Watch aus telefonieren?
Ahad Khan

1
Kann ich den Lautsprecher programmgesteuert für Anrufe einschalten, die auf diese Weise in ios entstanden sind?
Uniruddh

sogar tel: 1234567890 funktioniert genauso wie tell: // 1234567890 es funktioniert
Durai Amuthan.H

218

Um zur ursprünglichen App zurückzukehren, können Sie telprompt: // anstelle von tel: // verwenden. - Die Tell-Eingabeaufforderung fordert den Benutzer zuerst auf, aber wenn der Anruf beendet ist, kehrt er zu Ihrer App zurück:

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

9
Ich habe eine Frage: Werden die Apps, die telprompt: // verwenden, von Apple abgelehnt?
Smeegol

7
Ich weiß, dass dies alt ist, aber ich habe ein paar Leute gefunden, die behaupteten, ihre Apps seien mit Telprompt genehmigt worden: "Ich habe meine App eingereicht, die Telprompt mit gemeinsam genutzten Anwendungen ohne das uiwebkit verwendet und von Apple erfolgreich genehmigt wurde. Antwortete am 19. Januar 2013 Pablo Alejandro Junge "
Mark McCorkle

1
telprompt: // ist nicht dokumentiert und sollte daher niemals als verlässlich angesehen werden. Dinge können sich ändern. Zum Beispiel könnte Apple entscheiden, dass ein bestimmtes URL-Schema ausschließlich benötigt wird oder einfach nicht zugelassen werden soll. Dann wird Ihre App kaputt gehen.
DevC

@ DevC: Was ist dann eine Alternative zu einer Telefonanruffunktion in unserer App?
BaSha

@ BaSha tel://nicht verwendentelprompt://
DevC

24

Wenn Sie die Antworten von @Cristian Radu und @Craig Mellon und den Kommentar von @ joel.d zusammenführen, sollten Sie Folgendes tun:

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

Dabei wird zunächst versucht, die URL "telprompt: //" zu verwenden. Wenn dies fehlschlägt, wird die URL "tel: //" verwendet. Wenn beides fehlschlägt, versuchen Sie, einen Anruf auf einem iPad oder iPod Touch zu tätigen.

Schnelle Version:

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

Die Antworten hier funktionieren perfekt. Ich konvertiere gerade die Antwort von Craig Mellon auf Swift. Wenn jemand nach einer schnellen Antwort sucht, hilft dies ihm.

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

Sie können auch tel: // anstelle von telprompt: //
Shivaay

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

8

Wenn Sie Xamarin zum Entwickeln einer iOS-Anwendung verwenden, ist hier das C # -Äquivalent zum Tätigen eines Telefonanrufs in Ihrer Anwendung:

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

In 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

Das Java RoboVM-Äquivalent:

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

3

Versuchte die Swift 3 Option oben, aber es hat nicht funktioniert. Ich denke, Sie benötigen Folgendes, wenn Sie auf Swift 3 gegen iOS 10+ laufen möchten:

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

Schnell

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

0

'openURL:' ist veraltet: zuerst in iOS 10.0 veraltet - Verwenden Sie stattdessen openURL: options: finishHandler :.

in Objective-c iOS 10+ verwenden:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber] options:@{} completionHandler:nil];
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.