[英]Invoke calls from background?
我正在尝试扩展我当前的应用程序(内部公司电话簿),以便能够通过我们的运营商的交换机转发呼叫。 这个过程是一个人打电话给我。 然后,我可以“停放”呼叫并呼叫另一个同事并再次拨打号码4以连接a和同事。 但是当我在脑海中完成代码处理时,我意识到这可能是不可能的。 因为发生的事情是人员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();
}
}
这将提示用户拨打此号码(因为如果没有提示,你不能发起呼叫?
现在,当完成此操作时,计时器启动(基于设置)以启动对第4号的第3次呼叫。这是电话公司总机用于将电话呼叫组合在一起的号码。
我们将应用程序置于内部状态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);
}
}
不确定我是否正确理解您的问题。 但一般来说,所有UI线程调用必须在UI线程(应用程序的主线程)上完成。 如果你有一个工作线程,你必须将UI调用委托给UI线程,否则会导致调用被忽略(事实上,它被忽略:))。
要从任何其他线程调用UI线程,请使用InvokeOnMainThread函数。 这是在所有NSObject派生类上实现的方法。
this.InvokeOnMainThread(委托{//在这里做你的东西});
希望这可以帮助。
这对于当前的iOS结构是无法解决的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.