我正在尝试扩展我当前的应用程序(公司内部电话簿),以便能够通过我们运营商的总机转接呼叫。这个过程就是一个人给我打电话。然后,我可以“暂留”该呼叫,并呼叫另一位同事,然后再次呼叫号码4,以连接人员A和该同事。但当我在脑海中经历代码过程时,我意识到这可能是不可能的。因为发生的是person A呼叫,所以我打开我的应用程序并选择一个人。应用程序发起呼叫,然后应用程序挂起到后台模式。
我如何继续让应用程序(在挂起时)向4号发起第三次呼叫,而不必再次激活该应用程序?从我的测试中,我可以看到应用程序发出了调试内容,但当尝试做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();
}
}这将提示用户呼叫此号码(因为afaik u在没有提示的情况下无法发起呼叫?
现在,当完成此操作时,计时器启动(基于设置)向号码4发起第三次呼叫。这是电话公司总机用来将电话呼叫配对在一起的号码。
我们将应用程序置于内部状态3(由于呼出而有意暂停应用程序)
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-10-21 22:27:57
这在当前的iOS结构中是无法解决的。
发布于 2011-05-09 22:01:09
不确定我是否正确理解了您的问题。但一般来说,所有UI线程调用都必须在UI线程(应用程序的主线程)上完成。如果您有一个工作线程,则必须将UI调用委托给UI线程,否则会导致该调用似乎被忽略(实际上,它正被忽略:)。
要从任何其他线程调用UI线程,请使用InvokeOnMainThread函数。这是在所有NSObject派生类上实现的方法。
this.InvokeOnMainThread (委托{ //在这里做你的事} );
希望这能有所帮助。
https://stackoverflow.com/questions/5937673
复制相似问题