如何检测 windows phone 10 中的呼叫挂断

How to detect call hang up in windows phone 10

我想以编程方式检测 windows phone 10.

的 UWP 应用程序何时挂断电话

我也看到了Caller ID sample and see Communication blocking and filtering sample

但我没有找到检测挂断电话的简单解决方案。我找到了 CallHistoryChanged 触发器,我认为我的复杂解决方案是在调用历史记录更改触发器时读取调用历史记录并获取最后一个来电。

检测电话挂断有什么简单的解决方法吗?

我的解决方案是否正确? 有没有比我的解决方案更好的解决方案?

Is there any simple solution for detect call hang up? Is my solution is correct? Is there a better solution than my solution?

据我所知,没有其他简单的检测呼叫挂断的解决方案。

有一个事件PhoneCallManager.CallStateChanged,也可以像下面这样检测挂断:

private bool callCame = false;

PhoneCallManager.CallStateChanged += PhoneCallManager_CallStateChanged;

private async void PhoneCallManager_CallStateChanged(object sender, object e)
{
    if (callCame&&(!PhoneCallManager.IsCallActive))
    {
        //do something
    }
    if (PhoneCallManager.IsCallIncoming)
    {
        callCame = true;
    }
}

但我不认为它比 CallHistoryChanged 触发器更好。它也不会让你最后挂断 phone 的号码。

Is my solution is correct?

所以是的,您的解决方案是正确的。

更新:这里没有技巧。注册后台任务:

private void btnClick_Click(object sender, RoutedEventArgs e)
{
    var taskRegistered = false;
    var exampleTaskName = "MyBackgroundTask";

    foreach (var task in BackgroundTaskRegistration.AllTasks)
    {
        if (task.Value.Name == exampleTaskName)
        {
            taskRegistered = true;
            break;
        }
    }

    if (!taskRegistered)
    {
        var builder = new BackgroundTaskBuilder();

        builder.Name = exampleTaskName;
        builder.TaskEntryPoint = "PhoneCallBackground.Class1";
        builder.SetTrigger(new PhoneTrigger(Windows.ApplicationModel.Calls.Background.PhoneTriggerType.CallHistoryChanged, false));
            builder.Register();
    }
}

并且不要忘记在 appxmanifest 文件中注册它:

如果您注册了 BackgroundTask,Run 方法将在您挂断后触发。 PhoneCallManager 无法注册 BackgroundTask。如果你想使用这个,你需要将它设置为默认的PhoneCall App。

更新2:

我查看了demo,你还在使用PhoneTriggerType.CallOriginDataRequest注册后台任务。请将其更改为 PhoneTriggerType.CallHistoryChanged。还要确保在对代码进行任何更改后取消注册已注册的后台任务。

这是我修改的演示:CallHistoryChangeTest