27 votes

Retour au comportement de l'application après un appel téléphonique différent dans le code natif de UIWebView

Selon la documentation d'Apple, afin de rendre le téléphone à appeler à partir de mon application, j'ai besoin de mettre en œuvre les protocoles suivants:

HTML lien:

<a href="tel:1-408-555-5555">1-408-555-5555</a>

Application Native chaîne d'URL:

tel:1-408-555-5555

Toutefois, à l'issue d'un appel téléphonique initiée à partir d'un lien HTML à l'intérieur d'une UIWebView, je suis redirigé droit de retour à ma demande. Mais à l'issue d'un appel téléphonique à partir d'une application native chaîne d'URL, mon iphone reste dans l'iphone régulier de l'application téléphone, et si je veux retourner à ma demande, je dois le faire manuellement.

Aussi loin que je peux dire à partir de la lecture de ce que les autres ont dit, il n'existe aucun moyen de modifier ce comportement.

Voici ma question:

  1. Est-il vrai qu'il est impossible pour revenir à une application après l' faire un appel téléphonique à partir d'un natif URL de l'application chaîne de caractères?
  2. Y aurait-il aucun inconvénient à mise en œuvre d'une UIWebView au lieu de un UILabel dans des situations où je je voulais vraiment que l'utilisateur soit redirigé vers ma demande après avoir terminé un appel téléphonique?

17voto

Ricky Helgesson Points 798

La manière la plus simple semble être:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt:0123456789"]];
 

Vous obtiendrez une invite et votre application retrouvera le focus une fois l'appel terminé.

16voto

lemnar Points 3108
  1. Le comportement ne diffèrent entre les appelant -[UIApplication openURL:] avec un tel: d'URL, et en cliquant sur un lien vers la même URL, en UIWebView.

  2. À l'aide d'un UIWebView au lieu d'un UILabel peut avoir quelques inconvénients, mais vous n'avez pas à afficher le UIWebView pour obtenir son tel URL de gestion du comportement. Au lieu de cela, il suffit de charger un tel de la demande d'URL dans une instance de UIWebView sans ajouter à votre vue de la hiérarchie.

Par exemple:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface PhoneCaller : NSObject
{
  @private
    UIWebView *webview;
}
- (void)callTelURL:(NSURL *)url;
@end

@implementation
- (id)init
{
    self = [super init];
    if (self)
    {
        webview = [[UIWebView alloc] init];
    }
    return self;
}
- (void)callTelURL:(NSURL *)url
{
    [webview loadRequest:[NSURLRequest requestWithURL:url]];
}
- (void)dealloc
{
    [webview release];
    [super dealloc];
}
@end

10voto

Eric Brotto Points 11383

Permettez-moi de simplifier un peu. Tout ce dont vous avez besoin est ce petit extrait:

 UIWebView *callWebview = [[UIWebView alloc] init];
NSURL *telURL = [NSURL URLWithString:@"tel:number-to-call"];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
 

que je suis arrivé ici .

* Récemment testé avec succès sur iOS 5.0.

4voto

3d0 Points 61

La méthode d'Eric's Brotto fonctionne toujours en 5.1. Vous devez ajouter la vue Web à la vue principale avant le loadRequest, comme ceci:

 NSString *cleanedString = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789-+()"] invertedSet]] componentsJoinedByString:@""];
NSString *escapedPhoneNumber = [cleanedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *telURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", escapedPhoneNumber]];
UIWebView *mCallWebview = [[UIWebView alloc] init]  ;
[self.view addSubview:mCallWebview];
[mCallWebview loadRequest:[NSURLRequest requestWithURL:telURL]]; 
 

(J'ai ajouté un nettoyeur de numéro de téléphone, pour supprimer tout caractère non numérique qui bloque cette méthode)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X