从后台调用调用
本文关键字:调用 后台 | 更新日期: 2023-09-27 17:55:51
我正在尝试扩展我当前的应用程序(公司内部电话簿),以便能够通过我们运营商的总机转接电话。这个过程是人A打电话给我。然后,我可以"寄存"呼叫并呼叫另一个同事,然后再次拨打号码 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();
}
}
这将提示用户拨打此号码(因为 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);
}
}
不确定我是否正确理解了您的问题。但通常,所有 UI 线程调用都必须在 UI 线程(应用的主线程)上完成。如果你有一个工作线程,你必须将 UI 调用委托给 UI 线程,如果不这样做,会导致调用似乎被忽略(事实上,它被忽略了:))。
若要从任何其他线程调用 UI 线程,请使用 InvokeOnMainThread 函数。这是在所有 NSObject 派生类上实现的方法。
这。InvokeOnMainThread (delegate {//do your stuff here} );
希望这有帮助。
这在当前的iOS结构中是无法解决的。