2012-12-06 8 views
6

ho bisogno di tornare alla mia app dopo aver fatto una telefonata dal mio app, in modo da uso di questo codice:Come scoprire se l'utente preme il tasto di chiamata o annullare quando si effettua una chiamata dal mio app?

NSURL *url = [NSURL URLWithString:@"telprompt://123-4567-890"]; 
[[UIApplication sharedApplication] openURL:url]; 

Quando il pulsante utente preme per eseguire questo codice, avviso viene visualizzato con 2 tasti, "Chiama" e "Annulla".

Come faccio a sapere se l'utente preme il tasto "chiamata"?

risposta

7

Questo non è perfetto, ma è possibile identificare che "call" è stato premuto anziché "cancel" ascoltando UIApplicationSuspendedNotification (dovresti aggiungere qualche logica per ignorare questo evento quando qualcuno ha premuto il tasto "home" chiave, o è stato accettare una chiamata in arrivo ... magari con l'aggiunta/rimozione l'osservatore intorno alla logica in cui viene presentato il numero di telefono):

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(suspended:) name:@"UIApplicationSuspendedNotification" object:nil]; 

-(void)suspended:(NSNotification *) notification 
{ 
    NSLog(@"Suspended"); 
} 
+1

mi sembra legittimo .. –

+2

esattamente quello di cui avevo bisogno tranne che sembra che la tua notifica non esista più in iOS6: UIApplicationDidEnterBackgroundNotification –

+0

@NicolasManzini: Ho provato UIApplicationDidEnterBackgroundNotification, ma sembra non funzionare in iOS8 – BaSha

2

Secondo iOS termini non è possibile. quando si completa la chiamata non è possibile reindirizzare a Applicazione.

In Jailbroken Phones solo che è possibile.

+0

È possibile, si utilizza Safari API, che consente di restituire ba ck dove hai lasciato. – GameBegins

1

Quando l'applicazione esegue sopra il codice, si uscirà applicazione corrente & navigare a chiamare applicazione di iPhone. Pertanto, l'applicazione non è in grado di identificare che l'utente del meteo abbia premuto o chiamato la chiamata. Spero che ti possa aiutare.

3
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(suspended:) name:@"UIApplicationSuspendedNotification" object:nil]; 

il codice qui sopra per @J Saprio funziona assolutamente bene . Prima che sospende l'applicazione del call center NSNotification "UIApplicationSuspendedNotification" Una volta che si sceglie la "chiamata" si eseguirà il metodo "(sospesa :)". Ecco il trucco, ogni volta che si chiama il metodo del centro NSNotification darà una chiamata a (sospeso :) con l'incremento di uno. La soluzione è rimuovere l'osservatore per [Centro NSNotification]. FAVORE è il frammento per esso. Ti aiuterà a eseguire il seguente metodo solo una volta.

-(void)suspended:(NSNotification *) notification 
{ 
    NSLog(@"Suspended"); 
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIApplicationSuspendedNotification" object:nil]; 

} 
0

provare questo, mi occupo di questo problema come segue:

in - (void) viewDidLoad:

NSNotificationCenter * center =[NSNotificationCenter defaultCenter]; 

[center addObserverForName:UIApplicationDidBecomeActiveNotification 
        object:nil 
        queue:[NSOperationQueue mainQueue] 
       usingBlock:^(NSNotification *note) 
{ 
    // use instance flag to know 
    if (self.isBeginCallPhone) 
    { 
     //do some thing 
     self.isBeginCallPhone = NO; 
    } 
}]; 

Non dimenticare:

- (void)dealloc{ 
[[NSNotificationCenter defaultCenter]removeObserver:self]; 

}

Problemi correlati