2011-05-09 56 views
3

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

首先,确定你可以做到这一点。其次,解释在哪个线程上有哪些功能,以及第四个呼叫在哪里启动? (用户界面按钮,其他地方?) – 2011-05-09 13:45:46

+1

你可以在这里澄清一些事情 - 通过“电话”你的意思是“电话”? – Luke 2011-05-09 14:20:33

+0

检查我的编辑在几分钟 – Anders 2011-05-10 05:54:15

回答

0

这对于当前的iOS结构是无法解决的。

1

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

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

this.InvokeOnMainThread(delegate {//在这里做你的东西});

希望这会有所帮助。

+0

我试过这个(或它已经这样做),但它似乎没有什么影响。我将添加几行代码来演示 – Anders 2011-05-10 05:53:58

相关问题