2010-07-23 16 views
10

Ich möchte wissen, ob es eine Möglichkeit gibt zu erkennen, ob der Benutzer von einer Anwendung, die gerade im Hintergrund ist, angerufen wird.Anrufstatus in iOS4 erkennen

Oder erhalten Sie eine Benachrichtigung, wenn der Anruf beendet wird, wenn der Anruf von meiner App initiiert wurde.

Oder noch mehr - gibt es eine Möglichkeit zu erkennen, welche App im Vordergrund steht?
Ich glaube nicht, dass dies möglich ist, aber ich musste versuchen ... ;-)

Alle Infos werden wir uns freuen.

Vielen Dank.

+0

Sie meinen in einem * Telefon * Anruf in einer anderen App? Wie in einem Anruf in Skype im Hintergrund ausgeführt? – progrmr

+0

Bitte lesen Sie http://stackoverflow.com/questions/3319805/detecting-call-state-in-ios4 –

Antwort

20

In CTCallCenter gibt es eine Methode callEventHandler, die Sie einen Block übergeben können, der aufgerufen wird, wenn Anrufereignisse auftreten. In diesem Block werden Sie ein Objekt CTCall übergeben und können die callState erhalten. So können Sie eine Benachrichtigung erhalten, wenn ein Anruf initiiert oder beendet wird, und es entsprechend behandeln. Sie können nicht herausfinden, von welcher Anwendung der Anruf initiiert wurde. Wenn Sie jedoch beim Tätigen des Anrufs einen IVAR festlegen, können Sie feststellen, dass Ihr Anruf von der Anwendung ausgeführt wurde.

Zum Beispiel:

CTCallCenter *callCenter = [[CTCallCenter alloc] init]; 
callCenter.callEventHandler=^(CTCall* call){ 
    if (call.callState == CTCallStateDisconnected) 
    { 
     //handle disconnect 
    } 
}; 

EDIT: Ihre Frage erneut zu lesen, möchten Sie diese Ereignisse während Sie ausgesetzt sind, richtig? Ich denke nicht, dass das möglich ist.

Vom docs:

Wenn Ihre Anwendung ist aktiv, wenn ein Anruf Ereignis stattfindet, löst das System das Ereignis sofort zu Ihrem Handler. Anrufereignisse können jedoch auch ausgeführt werden, während Ihre Anwendung gesperrt ist. Während die Anwendung ausgesetzt ist, werden keine Anrufereignisse empfangen. Wenn Ihre Anwendung den aktiven Status wieder aufnimmt, erhält sie für jeden Anruf, der den Status geändert hat, ein einzelnes Anrufereignis - unabhängig davon, wie viele Statusänderungen der Anruf während der Aussetzung Ihrer Anwendung erfahren hat. Das Einzelanrufereignis, das an Ihren Handler gesendet wird, nachdem Ihre Anwendung in den aktiven Status zurückgekehrt ist, beschreibt den Status des Anrufs zu diesem Zeitpunkt.

+0

Vielen Dank. Scheint, dass Core Telephony meinem Ziel dienen kann. Weißt du, ob ich meine App aus dem Hintergrund nach vorne bringen kann? –

+1

Nein, Sie können nicht alleine in den Vordergrund treten. Und Sie werden begrenzt sein, welche Ereignisse Sie erhalten. Das Beste, was Sie tun können, ist auf Zustandsübergangsbenachrichtigungen zu hören und die Dinge entsprechend zu behandeln. Vgl. http://developer.apple.com/iphone/library/documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html – Don

+0

Vielen Dank. Ich bin mit einigen iOS3 Projekten fest und habe keine Zeit, alle iOS4 Innovationen zu lernen ... –

8

Wenn Sie App im Hintergrund läuft und hat eine AVAudioSession geht, werden Sie Rückrufe auf den AVAudioSessionDelegate erhalten sagen Ihnen, dass Ihre AVAudioSession unterbrochen wurde, wenn ein Anruf eingeht. AFAIK, das ist alles, was du bekommst.

+0

Danke. Übrigens bedeutet es, dass ich während eines Telefonats keine Töne/Musik abspielen kann? Auch wenn meine App vorne liegt (und die Telefon-App im Hintergrund ist)? –

+2

Ich hatte ein Problem mit meiner App (im Hintergrund) beim Abspielen von Sounds während eines Telefonanrufs. Ich habe die AVAudioSessionDelegate-Rückrufe verwendet, um zu verfolgen, ob sie unterbrochen wurden oder nicht, und wenn sie unterbrochen wird, hört die App auf, Töne abzuspielen. – progrmr

Verwandte Themen