Passer un appel téléphonique par programmation


138

Comment puis-je passer un appel téléphonique par programmation sur iPhone? J'ai essayé le code suivant mais rien ne s'est passé:

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

2
Pour le code en swift, vous pouvez suivre cette réponse stackoverflow.com/a/29869456/3950397
Sahil Kapoor

Réponses:


189

La valeur mymobileNO.titleLabel.text n'inclut probablement pas le schéma tel: //

Votre code doit ressembler à ceci:

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

3
Il n'y a aucune chance que nous puissions revenir à l'application d'origine avec cette approche.
Artem Oboturov

4
Je pense que l'approche de Mellon est meilleure car elle invite d'abord l'utilisateur, puis revient à votre application après l'appel. Assurez-vous simplement d'utiliser canOpenURL: et de revenir à l'invite tel: car telprompt n'est pas officiel et pourrait être supprimé dans une future version iOS.
joel.d

Comment puis-je passer un appel depuis l'Apple Watch.
Ahad Khan

1
Puis-je activer le haut-parleur par programmation pour un appel provenant de cette façon dans iOS?
uniruddh le

même tel: 1234567890 fonctionne également comme comment dire: // 1234567890 cela fonctionne
Durai Amuthan.H

218

Pour revenir à l'application d'origine, vous pouvez utiliser telprompt: // au lieu de tel: // - L'invite tell demandera d'abord à l'utilisateur, mais lorsque l'appel sera terminé, il retournera à votre application:

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

9
J'ai une question: les applications qui utilisent telprompt: // seront-elles rejetées par Apple?
Smeegol

7
Je sais que c'est vieux, mais j'ai trouvé quelques personnes affirmant que leurs applications avaient été approuvées à l'aide de telprompt: "J'ai soumis mon application qui utilise telprompt avec une application partagée sans uiwebkit et a été approuvée avec succès par Apple. Réponse 19 janvier 2013 Pablo Alejandro Junge "
Mark McCorkle

1
telprompt: // n'est pas documenté et ne doit donc jamais être invoqué. Les choses peuvent changer, par exemple, Apple pourrait décider qu'un schéma d'URL donné est quelque chose dont ils ont besoin exclusivement ou ne souhaitent tout simplement pas autoriser, alors votre application se cassera.
DevC

@DevC: Alors quelle est l'alternative à la fonction d'appel téléphonique dans notre application?
BaSha

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

24

En fusionnant les réponses de @Cristian Radu et @Craig Mellon, et le commentaire de @ joel.d, vous devriez faire:

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

Cela essaiera d'abord d'utiliser l'URL "telprompt: //", et si cela échoue, il utilisera l'URL "tel: //". Si les deux échouent, vous essayez de passer un appel téléphonique sur un iPad ou un iPod Touch.

Version 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

Les réponses ici fonctionnent parfaitement. Je suis juste en train de convertir la réponse de Craig Mellon en Swift. Si quelqu'un vient chercher une réponse rapide, cela l'aidera.

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

vous pouvez également utiliser tel: // à la place de telprompt: //
Shivaay

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

8

Si vous utilisez Xamarin pour développer une application iOS, voici l'équivalent C # pour passer un appel téléphonique dans votre application:

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

Dans 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

L'équivalent Java RoboVM:

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

3

J'ai essayé l'option Swift 3 ci-dessus, mais cela n'a pas fonctionné. Je pense que vous avez besoin des éléments suivants si vous devez exécuter contre iOS 10+ sur 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

Rapide

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

0

'openURL:' est obsolète: d'abord obsolète dans iOS 10.0 - Veuillez utiliser openURL: options: completionHandler: à la place

dans Objective-c iOS 10+, utilisez:

NSString *phoneNumber = [@"tel://" stringByAppendingString:mymobileNO.titleLabel.text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber] options:@{} completionHandler:nil];
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.