首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从后台调用调用?

从后台调用调用?
EN

Stack Overflow用户
提问于 2011-05-09 21:40:33
回答 2查看 837关注 0票数 3

我正在尝试扩展我当前的应用程序(公司内部电话簿),以便能够通过我们运营商的总机转接呼叫。这个过程就是一个人给我打电话。然后,我可以“暂留”该呼叫,并呼叫另一位同事,然后再次呼叫号码4,以连接人员A和该同事。但当我在脑海中经历代码过程时,我意识到这可能是不可能的。因为发生的是person A呼叫,所以我打开我的应用程序并选择一个人。应用程序发起呼叫,然后应用程序挂起到后台模式。

我如何继续让应用程序(在挂起时)向4号发起第三次呼叫,而不必再次激活该应用程序?从我的测试中,我可以看到应用程序发出了调试内容,但当尝试做UI内容时,例如打开浏览器,它不会通过。而且,当有活动的呼叫时,它甚至可能吗?或者,调用会占用活动并抑制所有应用程序吗?

只是希望在我继续之前快速输入一些信息,并在这上面花费无用的时间,意识到这甚至可能是不可能的。

编辑:添加了一些代码示例。

首先,用户按下通讯录中的一行。

代码语言:javascript
复制
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(由于呼出而有意暂停应用程序)

代码语言:javascript
复制
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);
    }   
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-21 22:27:57

这在当前的iOS结构中是无法解决的。

票数 0
EN

Stack Overflow用户

发布于 2011-05-09 22:01:09

不确定我是否正确理解了您的问题。但一般来说,所有UI线程调用都必须在UI线程(应用程序的主线程)上完成。如果您有一个工作线程,则必须将UI调用委托给UI线程,否则会导致该调用似乎被忽略(实际上,它正被忽略:)。

要从任何其他线程调用UI线程,请使用InvokeOnMainThread函数。这是在所有NSObject派生类上实现的方法。

this.InvokeOnMainThread (委托{ //在这里做你的事} );

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5937673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档