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
UIWebView
lugar de un UILabel puede tener algunas desventajas, pero no es necesario queUIWebView
para obtener su comportamiento de manejo de URL detel
. En su lugar, simplemente cargue una solicitud detel
URL 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.