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

Posted

技术标签:

【中文标题】如何使用呼叫目录扩展来识别我的应用程序中的来电?【英文标题】:How to use call directory extension to identify a incoming call in my application? 【发布时间】:2016-11-28 05:12:27 【问题描述】:

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

让一个号码“+919876xxxxxx”使用此方法添加呼叫目录扩展:

- (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] Caller ID: Telemarketer。

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

提前致谢。

【问题讨论】:

使用扩展,你想创建扩展 @Anbu.Karthik ,是的,我想创建 iOS10 中新的呼叫目录扩展 @Saurabh Jain 你有解决方案吗?我有同样的问题,在我的应用程序呼叫阻止功能工作正常但无法识别呼叫。如果你已经解决了,请帮忙。 @Saurabh Jain:我想在来电/去电时显示带有姓名的标签 @Saurabh Jain:你能给我你的手机吗?如果可能的话,我想得到一些建议。 【参考方案1】:

如果这个问题不是如何写电话簿扩展,而是如何获取来电号码,我认为是这个问题,那么它是不可能的。

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

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

【讨论】:

能否在后台检测通话状态?【参考方案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 中运行良好

【讨论】:

如何在上述方法中添加动态电话号码和标签 动态号码,你是指未知号码来电吗,NO据我所知不可能,必须先定义号码才能识别。 您可以从服务器获取列表,然后对其进行迭代并调用 addIdentificationEntry。

以上是关于如何使用呼叫目录扩展来识别我的应用程序中的来电?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在后台观察来电和去电吗?

当来电活动置于后台时返回呼叫 UI

如何在 iOS 10 上使用 CallKit 显示来电显示(添加标识条目)

什么是自动语音识别功能?

从iOS的电话记录中拨打voip电话

如何在来电活动后自动唤起应用程序