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

Swift 3

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

    }
Rohit Pathak
la source
3

L'équivalent Java RoboVM:

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

Rapide

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