Xamarin.ios Xamarin iOS可恢复电话状态

Xamarin.ios Xamarin iOS可恢复电话状态,xamarin.ios,openurl,Xamarin.ios,Openurl,是否有方法在通过应用程序拨打电话后恢复通话状态。我正在用下面的命令打电话 NSUrl url = new NSUrl("tel://" + phoneStr); UIApplication.SharedApplication.OpenUrl(url); 它显示一个带有“取消”和“呼叫”按钮的弹出窗口。如果用户取消,它将留在应用程序中,如果用户单击“呼叫”,它将发起呼叫。如果用户打了电话或取消了,我想获得单击操作。 有没有办法在iOS 10+上获取该状态?我们可以使用CXCallObse

是否有方法在通过应用程序拨打电话后恢复通话状态。我正在用下面的命令打电话

  NSUrl url = new NSUrl("tel://" + phoneStr);
  UIApplication.SharedApplication.OpenUrl(url);
它显示一个带有“取消”和“呼叫”按钮的弹出窗口。如果用户取消,它将留在应用程序中,如果用户单击“呼叫”,它将发起呼叫。如果用户打了电话或取消了,我想获得单击操作。
有没有办法在iOS 10+上获取该状态?我们可以使用
CXCallObserver
在用户拨打电话时捕获事件,如:

//Make sure both CXCallObserver and ObserverDelegate a strong reference
private CXCallObserver callObserver;
private MyCallObserverDelegate myCallDelegate;

callObserver = new CXCallObserver();
myCallDelegate = new MyCallObserverDelegate();
callObserver.SetDelegate(myCallDelegate, null);
CXCallObserver
执行委托:

public class MyCallObserverDelegate : CXCallObserverDelegate
{
    public override void CallChanged(CXCallObserver callObserver, CXCall call)
    {
        Console.WriteLine(call.Outgoing);
        Console.WriteLine(call.HasConnected);
        Console.WriteLine(call.OnHold);
        Console.WriteLine(call.HasEnded);
    }
}
但不幸的是,当用户单击“取消”时,它不会触发

用户单击按钮(取消或调用)后,应用程序将触发
DidBecomeActiveNotification
,因此我建议您在触发
DidBecomeActiveNotification
时创建延迟方法。然后,我们可以检测用户单击的按钮:

NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.DidBecomeActiveNotification, async (notification) =>
{
    await Task.Delay(500);
    detectCalling();
});

在早期,我们可以定义一个字段
bool isDialing=false
,如果
CallChanged()
将其设置为true。最后我们可以在
detectCalling()中检测字段

您确定它是否适用于iOS 11。iOS 11中不推荐使用手机通话状态。@User382我在iOS 11.2.2上测试过,它工作正常。但call.CallState==“ctcallstatedilling”不推荐使用。请参阅苹果文档@User382我已经更新了我的答案,将
ctcallstatedilling
修改为
CXCallObserver