如何使用Xamarin中的CallDirectoryExtension创建一个提供来电显示的应用?

时间:2016-09-20 18:27:22

标签: c# ios xamarin.ios callkit

我正在关注Xamarin指南,创建一个可以通过创建呼叫目录扩展来阻止电话号码或显示来电显示的iPhone应用程序:

https://developer.xamarin.com/guides/ios/platform_features/introduction-to-ios10/callkit/#Implementing-a-Call-Directory-Extension

Xamarin文档中的代码并未完全更新,但如果您只是在Xamarin Studio for OS X中创建一个呼叫目录扩展,您将获得一些示例代码以帮助您开始。

以下是阻止电话号码22334455的最简单的代码:

[Register("CallDirectoryHandler")]
public class CallDirectoryHandler : CXCallDirectoryProvider, ICXCallDirectoryExtensionContextDelegate
{
    protected CallDirectoryHandler(IntPtr handle) : base(handle) { }

    public override void BeginRequestWithExtensionContext(NSExtensionContext context)
    {
        var cxContext = (CXCallDirectoryExtensionContext)context;
        cxContext.Delegate = this;

        cxContext.AddBlockingEntry(22334455);
        //cxContext.AddIdentificationEntry(22334455, "Telemarketer");

        cxContext.CompleteRequest(null);
    }

    public void RequestFailed(CXCallDirectoryExtensionContext extensionContext, NSError error) { }
}

从示例代码看,它应该像显示相同数字的调用者ID一样容易,只需使用方法AddIdentificationEntry而不是AddBlockingEntry,但我无法使其工作。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

答案很简单。

AddIdentificationEntry()需要国家/地区代码,AddBlockingEntry()不需要。

当我在电话号码的开头添加47(挪威的国家代码)时,它有效。以下是显示挪威电话号码22334455的来电显示的工作代码:

public override void BeginRequestWithExtensionContext(NSExtensionContext context)
{
  var cxContext = (CXCallDirectoryExtensionContext)context;
  cxContext.Delegate = this;

  cxContext.AddIdentificationEntry(4722334455, "Telemarketer");

  cxContext.CompleteRequest(null);
}

addBlockingEntry()适用于22334455和4722334455作为输入。