我正试图扩展我目前的应用程序(内部公司电话簿),以便能够通过运营商的交换机转接呼叫。这个过程是人呼唤我。然后,我可以“停放”该呼叫并呼叫另一个同事,并再次拨打号码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