我有一個程序,當程序啓動時自動啓動一個電話。這是在AppDelegate的「applicationDidFinishLaunching」方法中實現的。如何識別電話後重新加載應用程序?
問題是:當通話結束並且我的應用程序再次自動啓動時,它會重新啓動該循環並再次啓動電話呼叫。
如何識別應用程序是否從該調用返回?或者以某種方式輕鬆保存定義呼叫是否已經完成的程序狀態或變量?
我剛剛開始iPhone編程,這出現了。
我有一個程序,當程序啓動時自動啓動一個電話。這是在AppDelegate的「applicationDidFinishLaunching」方法中實現的。如何識別電話後重新加載應用程序?
問題是:當通話結束並且我的應用程序再次自動啓動時,它會重新啓動該循環並再次啓動電話呼叫。
如何識別應用程序是否從該調用返回?或者以某種方式輕鬆保存定義呼叫是否已經完成的程序狀態或變量?
我剛剛開始iPhone編程,這出現了。
在您的應用程序啓動電話之前,請閱讀application NSUserDefaults
database中的BOOL
標誌,詢問是否應啓動該呼叫,例如, callWasMade
。
如果callWasMade
設置爲初始默認值NO
,則將該標誌設置爲YES
,將該標誌的值保存爲NSUserDefaults
,然後觸發電話呼叫。
在隨後啓動您的應用程序時,將從NSUserDefaults
中讀取callWasMade
(YES
)的值,並且不會觸發呼叫。
此時,將標誌值翻轉回NO
以允許下一次呼叫應該是安全的。
這是無法完成的。國旗的想法是很好的,直到你意識到並非所有的電話終止返回到你的應用程序。其中一個例子是,如果您按下頂部的電源按鈕掛斷電話。
對於這些情況,該標誌將是不一致的(即在下次啓動您的應用程序會認爲這是從調用返回的時候,其實它是從主屏幕啓動)。
所以總結一下,沒有辦法檢測到手機的返回,我已經詢問了蘋果開發者對此的支持。
是的,我也意識到國旗可能會變得不一致。但這是一種罕見的情況,如果用戶剛退出應用程序並再次打開應用程序,它將自動修復。我會繼續這樣做。 – 2009-06-03 10:48:59
您可以使用一個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");
}
};
謝謝!我已經有一個hasCalled-boolean,但顯然沒有保存在任何地方,所以它沒有工作。 NSUserDefaults數據庫是我的問題的答案。 – 2009-05-26 11:51:48