Возврат к поведению приложения после телефонного звонка, отличного по собственному коду от UIWebView - PullRequest
27 голосов
/ 15 марта 2011

Согласно документации Apple , чтобы сделать телефонный звонок из моего приложения, мне необходимо реализовать следующие протоколы:

HTML-ссылка:

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

Строка URL собственного приложения:

tel:1-408-555-5555

Однако после завершения телефонного звонка, инициированного по ссылке HTML внутри UIWebView, я перенаправлен обратно в свое приложение. Но после завершения телефонного звонка, сделанного из строки URL-адреса собственного приложения, мой iphone остается в обычном приложении телефона iphone, и если я хочу вернуться к своему приложению, я должен сделать это вручную.

Насколько я могу судить по прочтению того, что говорили другие, изменить это поведение невозможно.

Вот мой вопрос:

  1. Правда ли, что это невозможно? вернуться к заявке после звонить по телефону от родного строка приложения URL?
  2. Был бы какой-то недостаток реализовать UIWebView вместо UILabel в ситуациях, когда я действительно хотел, чтобы пользователь был перенаправлен обратно в мое приложение после завершения телефонного звонка?

Ответы [ 4 ]

17 голосов
/ 21 мая 2012

Самый простой способ выглядит так:

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

Вы получите приглашение, и ваше приложение восстановит фокус после завершения вызова.

16 голосов
/ 30 мая 2011
  1. Поведение действительно отличается между вызовом -[UIApplication openURL:] с URL-адресом tel: и переходом по ссылке на тот же URL-адрес в UIWebView.

  2. Использование UIWebView вместо UILabel может иметь некоторые недостатки, но вам не нужно на самом деле отображать UIWebView, чтобы получить tel поведение обработки URL.Вместо этого просто загрузите URL-запрос tel в экземпляре UIWebView, не добавляя его в иерархию представлений.

Например:

#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
10 голосов
/ 07 декабря 2011

Позвольте мне немного упростить.Все, что вам нужно, это маленький фрагмент:

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

, который я получил здесь .

* Недавно успешно протестировано на iOS 5.0.

4 голосов
/ 03 мая 2012

Метод Эрика Бротто все еще работает в 5.1. Вы должны добавить веб-представление к основному представлению до loadRequest, например:

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]]; 

(я добавил очиститель номера телефона, чтобы удалить любой нечисловой символ, который блокирует этот метод)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...