Xamarin iOS получает статус обратно телефонного звонка
Есть ли способ вернуть статус вызова после вызова из приложения. Я использую следующие, чтобы позвонить
NSUrl url = new NSUrl("tel://" + phoneStr);
UIApplication.SharedApplication.OpenUrl(url);
Он показывает всплывающее окно с кнопками "Отмена" и "Позвонить". Если пользователь отменяет его, он остается в приложении, если пользователь нажимает кнопку вызова, он инициирует вызов. Я хотел бы получить действие щелчка, если пользователь совершил звонок или отменил его. Есть ли способ получить этот статус
1 ответ
На 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()
огни установили это правда. Наконец мы можем обнаружить поле в detectCalling();
,