我正試圖擴展我目前的應用程序(內部公司電話簿),以便能夠通過運營商的交換機轉接呼叫。這個過程是人呼喚我。然後,我可以「停放」該呼叫並呼叫另一個同事,並再次撥打號碼4來連接人員a和同事。但是當我頭腦中的代碼過程中,我意識到這可能是不可能的。因爲發生的事情是Person A電話,我打開我的應用程序並選擇一個人。該應用發起呼叫,然後該應用暫停到後臺模式。從後臺調用調用?
我該如何繼續讓應用程序(暫停時)啓動第四次呼叫而不必再次激活應用程序?從我的測試中,我可以看到應用程序發送調試的東西,但當試圖做UI的東西,如打開瀏覽器,它不會通過。當有一個活躍的電話時,它甚至是可能的嗎?或者電話會採取行動並抑制所有應用程序?
只是希望在此之前提供一些快速的輸入,然後再繼續前進,花費無用的時間來實現這一點,甚至可能無法實現。
編輯:增加了一些代碼示例。
首先用戶按下聯繫簿中的一行。
public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
Console.WriteLine("Initiate Call to Contact");
NSUrl url = new NSUrl("tel:" + _items.Contacts[indexPath.Row].Number);
if (!UIApplication.SharedApplication.OpenUrl(url))
{
var av = new UIAlertView("Not supported"
, "Scheme 'tel:' is not supported on this device"
, null
, "Ok thanks"
, null);
av.Show();
}
}
這將提示用戶撥打這個號碼(因爲據我所知你無法啓動沒有提示?
呼叫現在,當這樣做的計時器啓動(設置基於)發起的第三個呼叫數4.這是電話公司的交換機採用配對電話中一起數。
我們把應用程序的內部狀態3(intented應用中止由於呼出)
public partial class AppDelegate : UIApplicationDelegate
{
int ourTask;
public override void DidEnterBackground (UIApplication application)
{
Console.WriteLine("Entered Background!");
ourTask = application.BeginBackgroundTask(delegate {
if(ourTask != 0) {
application.EndBackgroundTask(ourTask);
ourTask = 0;
}
});
new System.Action(delegate {
if(_state == 3) {
BeginInvokeOnMainThread(delegate {
Console.WriteLine("Code queued");
if(UIDevice.CurrentDevice.IsMultitaskingSupported) {
Thread.Sleep(10000);
NSUrl url = new NSUrl("tel:" + 4);
if (!UIApplication.SharedApplication.OpenUrl(url))
{
Console.WriteLine("Not supported!");
}
Console.WriteLine("Invoke Finished!");
}
application.BeginInvokeOnMainThread(delegate {
if(ourTask != 0) {
application.EndBackgroundTask(ourTask);
ourTask = 0;
Console.WriteLine("App Ended!");
}
});
});
}
}).BeginInvoke(null,null);
}
}
首先,確定你可以做到這一點。其次,解釋在哪個線程上有哪些功能,以及第四個呼叫在哪裏啓動? (用戶界面按鈕,其他地方?) – 2011-05-09 13:45:46
你可以在這裏澄清一些事情 - 通過「電話」你的意思是「電話」? – Luke 2011-05-09 14:20:33
檢查我的編輯在幾分鐘 – Anders 2011-05-10 05:54:15