0

我正在研究 callKit 框架,我发现通过使用呼叫目录扩展,我们可以识别来电号码。我的问题是如何在 iOS 应用程序中实现呼叫目录扩展来识别来电详细信息。我在目标 C 中工作。

使用此方法让号码“+919876xxxxx”添加到呼叫目录扩展中:

- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
    // Numbers must be provided in numerically ascending order.
    CXCallDirectoryPhoneNumber phoneNumbers[] = {+919876xxxxx};

    NSArray<NSString *> *labels = @[ @"Telemarketer"];
    NSUInteger count = (sizeof(phoneNumbers) / sizeof(CXCallDirectoryPhoneNumber));

    for (NSUInteger i = 0; i < count; i += 1) {
        CXCallDirectoryPhoneNumber phoneNumber = phoneNumbers[i];
        NSString *label = labels[i];
        [context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:label];
    }
    return YES;
}

而我在手机设置中的通话拦截和识别功能。当我从这个号码拨打电话时,它会显示 [App name] 来电显示:Telemarketer。

我的问题是如何在我的应用程序中知道这个数字,以便在表格中显示这个数字。

提前致谢。

4

2 回答 2

6

如果这个问题不是如何编写呼叫目录扩展,而是如何获取来电号码,我认为这是问题所在,那么它是不可能的。

有来电时不涉及呼叫目录分机。它所做的只是注册号码,这些号码存储在手机应用程序专用的内部 SQL 数据库中。当有来电时,呼叫目录扩展不会运行,因此它和您的应用程序无法识别来电的号码,这与以往一样,在 iOS 10 中没有更改。

iOS 10 中添加了针对 Voip 应用程序的呼叫检测的新功能,但如果您不是 voip 应用程序,您仍然无法获取传入(或传出)呼叫的号码。

于 2016-11-29T14:42:59.417 回答
2

首先,您需要在应用程序设置中启用您的 CallBlocker 应用程序,然后执行此操作 -

转到设置->电话->呼叫阻止和识别->启用您的应用程序。

之后addIdentificationEntry用于添加条目

  private func addIdentificationPhoneNumbers(to context: CXCallDirectoryExtensionContext) throws {

        let phoneNumbers: [CXCallDirectoryPhoneNumber] = [ 18775555555, +919899999999 ]
        let labels = [ "Telemarketer", "Local business" ]

        for (phoneNumber, label) in zip(phoneNumbers, labels) {
            context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label)
        }
    }

在 Xcode 8.x swift 3.x 中运行良好

于 2017-05-30T15:33:13.200 回答