如何使用呼叫目录扩展来识别我的应用程序中的来电?

时间:2016-11-28 05:12:28

标签: ios objective-c xcode8 ios10 callkit

我正在研究callKit框架,我发现通过使用调用目录扩展,我们可以识别传入的电话号码。我的问题是如何在iOS应用程序中实现调用目录扩展以识别传入的调用详细信息。我在Objective 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;
}

我在手机设置中的通话阻止和识别功能。 当我从这个号码打电话时,它显示[应用程序名称]来电显示:电话推销员。

我的问题是我怎样才能在申请表中知道这个号码,以便在表格中显示这个号码。

提前致谢。

2 个答案:

答案 0 :(得分:7)

如果这个问题不是如何编写一个呼叫目录扩展,但是如何获取一个来电的号码,我认为这是什么问题,那么就不可能了。

有来电时,不会涉及通话目录分机。所有这一切都是寄存器编号,这些编号存储在手机应用程序专用的内部SQL数据库中。当有来电时呼叫目录分机不会运行,因此它和你的应用无法识别来电号码,这与以往一样,在iOS 10中没有改变。

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

答案 1 :(得分:2)

首先,您需要在App Setting中启用CallBlocker应用程序 为此 - 点击此处 -

  

转到设置 - &gt;电话 - &gt;呼叫阻止&amp;识别 - &gt;启用您的   应用

之后使用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

中工作正常