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]];
user564963
quelle
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]];
Cristian Radu
quelle
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]];
Craig Mellon
quelle
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.
}
Guillaume Boudreau
quelle
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)!)
Shivaay
quelle
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);
Michael Kniskern
quelle
6

Swift 3

let phoneNumber: String = "tel://3124235234"
UIApplication.shared.openURL(URL(string: phoneNumber)!)
Jorge Costa
quelle
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")
        }

    }
Rohit Pathak
quelle
3

Das Java RoboVM-Äquivalent:

public void dial(String number)
{
  NSURL url = new NSURL("tel://" + number);
  UIApplication.getSharedApplication().openURL(url);
}
EntangledLoops
quelle
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)
Charlie Seligman
quelle
1
let phone = "tel://\("1234567890")";
let url:NSURL = NSURL(string:phone)!;
UIApplication.sharedApplication().openURL(url);
Himali Shah
quelle
1

Schnell

if let url = NSURL(string: "tel://\(number)"), 
    UIApplication.sharedApplication().canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
Sazzad Hissain Khan
quelle
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];
BoSoud
quelle