Возвратитесь к поведению приложения после разговора по телефону в собственном коде, чем UIWebView

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

Ссылка HTML:

1-408-555-5555 

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

 https://stackoverflow.com/questions/5317783/return-to-app-behavior-after-phone-call-different-in-native-code-than-uiwebview/tel:1-408-555-5555 

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

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

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

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

  1. Поведение отличается от вызова -[UIApplication openURL:] с URL-адресом tel: и нажатием ссылки на тот же URL-адрес в UIWebView .

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

Например:

 #import  #import  @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 

Самый простой способ:

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

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

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

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

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

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

Метод Эрика Бротто по-прежнему работает в 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]]; 

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

  • Как передать объект с помощью NSNotificationCenter
  • Почему вы используете символ подчеркивания для переменной экземпляра, но не соответствующее ему свойство?
  • Удалить HTML-tags из NSString на iPhone
  • UITextView с подсветкой синтаксиса
  • objective C - Как использовать метод initWithCoder?
  • Что такое Swift-эквивалент ответаSoSelector?
  • Множественное перечисление значений в Obj-C
  • Рисование поэтапно в UIView (iPhone)
  • NSDateFormatter с 24 часами
  • Преобразование NSString даты в NSDate
  • Сколько стоит разработка приложения для iPhone?
  • Давайте будем гением компьютера.