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