如何检测Windows Phone 10中的呼叫挂断

时间:2016-09-30 10:12:49

标签: c# windows-phone uwp

我想以编程方式检测何时在Windows Phone 10的UWP应用中挂断电话。

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

但是,当电话挂机时,我找不到简单的方法来检测。我发现了CallHistoryChanged触发器,我认为我的复杂解决方案是在呼叫历史记录改变触发并获得最后一个来电时读取呼叫历史记录。

检测呼叫挂断是否有任何简单的解决方案?

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

1 个答案:

答案 0 :(得分:0)

  

检测呼叫挂断有什么简单的解决方案吗?   我的解决方案是否正确?有没有比我的解决方案更好的解决方案?

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

有一个事件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触发更好。并且它也不会为你提供最后一个挂断电话号码。

  

我的解决方案是否正确?

是的,你的解决方案是正确的。

更新:这里没有诀窍。注册BackgroundTask:

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文件中注册它: enter image description here

如果您注册了BackgroundTask,挂起后将会触发Run方法。无法为BackgroundTask注册PhoneCallManager。如果要使用此功能,则需要将其设置为默认的PhoneCall应用程序。

<强> UPDATE2:

我查看了演示,您仍在使用PhoneTriggerType.CallOriginDataRequest注册后台任务。请将其更改为PhoneTriggerType.CallHistoryChanged。并且在对代码进行任何更改后,还要确保已注册的后台任务未注册。

以下是我修改的演示:CallHistoryChangeTest