iphone - verificacion - Volver al comportamiento de la aplicación después de una llamada telefónica diferente en código nativo que UIWebView
se enviaron demasiados codigos iphone (4)
El comportamiento difiere entre llamadas
-[UIApplication openURL:]con untel:URL, y haciendo clic en un enlace a la misma URL en unUIWebView.Usar un
UIWebViewlugar de un UILabel puede tener algunas desventajas, pero no es necesario queUIWebViewpara obtener su comportamiento de manejo de URL detel. En su lugar, simplemente cargue una solicitud detelURL en una instancia de UIWebView sin agregarla a su jerarquía de vistas.
Por ejemplo:
#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
De acuerdo con la documentación de Apple , para hacer llamadas desde mi aplicación, necesito implementar los siguientes protocolos:
Enlace HTML:
<a href="tel:1-408-555-5555">1-408-555-5555</a>
Cadena de URL de aplicación nativa:
tel:1-408-555-5555
Sin embargo, después de completar una llamada telefónica iniciada desde un enlace HTML dentro de UIWebView, me redirigen directamente a mi aplicación. Pero al completar una llamada telefónica hecha desde una cadena de URL de aplicación nativa, mi iPhone permanece en la aplicación telefónica habitual del iPhone, y si quiero regresar a mi aplicación, tengo que hacerlo manualmente.
Por lo que puedo decir al leer lo que otros han dicho, no hay forma de cambiar este comportamiento.
Aquí está mi pregunta:
- ¿Es cierto que es imposible regresar a una aplicación después de realizar una llamada desde una cadena de URL de aplicación nativa?
- ¿Habría alguna desventaja al implementar UIWebView en lugar de UILabel en situaciones en las que realmente quería que el usuario fuera redireccionado a mi aplicación después de completar una llamada telefónica?
El método de Eric''s Brotto todavía funciona en 5.1. Debe agregar la vista web a la vista principal antes de loadRequest, como esta:
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]];
(Agregué un limpiador de número de teléfono, para eliminar cualquier carácter no numérico que bloquee este método)
La forma más simple parece ser:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt:0123456789"]];
Recibirá un aviso y su aplicación recuperará el foco una vez que finalice la llamada.
Permíteme simplificar un poco. Todo lo que necesitas es este pequeño fragmento:
UIWebView *callWebview = [[UIWebView alloc] init];
NSURL *telURL = [NSURL URLWithString:@"tel:number-to-call"];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
que obtuve here .
* Recientemente probado con éxito en iOS 5.0.