2009-05-26 32 views
3

我有一個程序,當程序啓動時自動啓動一個電話。這是在AppDelegate的「applicationDidFinishLaunching」方法中實現的。如何識別電話後重新加載應用程序?

問題是:當通話結束並且我的應用程序再次自動啓動時,它會重新啓動該循環並再次啓動電話呼叫。

如何識別應用程序是否從該調用返回?或者以某種方式輕鬆保存定義呼叫是否已經完成的程序狀態或變量?

我剛剛開始iPhone編程,這出現了。

回答

1

在您的應用程序啓動電話之前,請閱讀application NSUserDefaults database中的BOOL標誌,詢問是否應啓動該呼叫,例如, callWasMade

如果callWasMade設置爲初始默認值NO,則將該標誌設置爲YES,將該標誌的值保存爲NSUserDefaults,然後觸發電話呼叫。

在隨後啓動您的應用程序時,將從NSUserDefaults中讀取callWasMadeYES)的值,並且不會觸發呼叫。

此時,將標誌值翻轉回NO以允許下一次呼叫應該是安全的。

+0

謝謝!我已經有一個hasCalled-boolean,但顯然沒有保存在任何地方,所以它沒有工作。 NSUserDefaults數據庫是我的問題的答案。 – 2009-05-26 11:51:48

3

這是無法完成的。國旗的想法是很好的,直到你意識到並非所有的電話終止返回到你的應用程序。其中一個例子是,如果您按下頂部的電源按鈕掛斷電話。

對於這些情況,該標誌將是不一致的(即在下次啓動您的應用程序會認爲這是從調用返回的時候,其實它是從主屏幕啓動)。

所以總結一下,沒有辦法檢測到手機的返回,我已經詢問了蘋果開發者對此的支持。

+0

是的,我也意識到國旗可能會變得不一致。但這是一種罕見的情況,如果用戶剛退出應用程序並再次打開應用程序,它將自動修復。我會繼續這樣做。 – 2009-06-03 10:48:59

0

您可以使用一個UIWebView來撥打電話就像在這個問題解釋說:

Return to app behavior after phone call different in native code than UIWebView

,並使用核心電話來檢查電話是否結束:

//before calling loadRequest: 
CTCallCenter *callCenter.callEventHandler=^(CTCall* call) { 

     if(call.callState == CTCallStateDialing) 
     { 
      //The call state, before connection is established, when the user initiates the call. 
      NSLog(@"Dialing"); 
     } 
     if(call.callState == CTCallStateIncoming) 
     { 
      //The call state, before connection is established, when a call is incoming but not yet answered by the user. 
      NSLog(@"Incoming Call"); 
     } 

     if(call.callState == CTCallStateConnected) 
     { 
      //The call state when the call is fully established for all parties involved. 
      NSLog(@"Call Connected"); 
     } 

     if(call.callState == CTCallStateDisconnected) 
     { 
      [self release]; 
      NSLog(@"Call Ended"); 

     } 

    }; 
相關問題