Возвратитесь к поведению приложения после разговора по телефону в собственном коде, чем UIWebView
Согласно документации 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, и если я хочу вернуться в мое приложение, я должен сделать это вручную.
Насколько я могу судить по чтению других, нет способа изменить это поведение.
Вот мой вопрос:
- Это правда, что это невозможно
вернуться в приложение после
сделать телефонный звонок от родного
строка URL-адреса приложения?
- Будет ли недостаток
внедрение UIWebView вместо
UILabel в ситуациях, когда я
действительно хотел, чтобы пользователь был
перенаправлен обратно в мое приложение
после завершения телефонного звонка?
Ответы
Ответ 1
-
Поведение отличается от вызова -[UIApplication openURL:]
с помощью URL tel:
и нажатия ссылки на тот же URL-адрес в UIWebView
.
-
Использование UIWebView
вместо UILabel может иметь некоторые недостатки, но вам не нужно фактически отображать UIWebView
, чтобы получить поведение обработки URL-адреса tel
. Вместо этого просто загрузите запрос 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
Ответ 2
Самый простой способ:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt:0123456789"]];
Вы получите приглашение, и ваше приложение восстановит фокус после завершения вызова.
Ответ 3
Позвольте мне немного упростить. Все, что вам нужно, это небольшой фрагмент:
UIWebView *callWebview = [[UIWebView alloc] init];
NSURL *telURL = [NSURL URLWithString:@"tel:number-to-call"];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
который я получил здесь.
* Недавно успешно протестирован на iOS 5.0.
Ответ 4
Метод Эрика Бротто по-прежнему работает в 5.1. Вы должны добавить webview к основному представлению перед 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]];
(Я добавил очиститель номера телефона, чтобы удалить любой не номер char, который блокирует этот метод)