如何使用呼叫目录扩展来识别我的应用程序中的来电?
How to use call directory extension to identify a incoming call in my application?
我正在研究 callKit 框架,我发现通过使用呼叫目录扩展,我们可以识别来电 phone 号码。我的问题是如何在 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;
}
还有我在phone设置中关于来电拦截和识别功能。
当我用这个号码打电话时,它显示 [App name] Caller ID: Telemarketer.
我的问题是如何在我的申请中知道这个数字,以便我在 table 中显示这个数字。
提前致谢。
如果这个问题不是怎么写电话簿分机,而是怎么获取来电号码,我觉得是问题所在,那就不可能了。
来电时不涉及电话簿分机。它所做的只是注册存储在 SQL 应用程序私有的内部 SQL 数据库中的号码。当有来电时,呼叫目录分机不会得到 运行,因此它和您的应用程序无法识别来电号码,这与以往一样,没有改变在 iOS 10.
在 iOS10 中添加了用于 Voip 应用程序的呼叫检测的新功能,但如果您不是 voip 应用程序,您仍然无法获取来电(或去电)的号码。
首先您需要在应用程序设置中启用您的 CallBlocker 应用程序
为此,请遵循此 -
Go to Settings->Phone->Call blocking & identification->Enable your
App.
之后使用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
中工作正常
我正在研究 callKit 框架,我发现通过使用呼叫目录扩展,我们可以识别来电 phone 号码。我的问题是如何在 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;
}
还有我在phone设置中关于来电拦截和识别功能。 当我用这个号码打电话时,它显示 [App name] Caller ID: Telemarketer.
我的问题是如何在我的申请中知道这个数字,以便我在 table 中显示这个数字。
提前致谢。
如果这个问题不是怎么写电话簿分机,而是怎么获取来电号码,我觉得是问题所在,那就不可能了。
来电时不涉及电话簿分机。它所做的只是注册存储在 SQL 应用程序私有的内部 SQL 数据库中的号码。当有来电时,呼叫目录分机不会得到 运行,因此它和您的应用程序无法识别来电号码,这与以往一样,没有改变在 iOS 10.
在 iOS10 中添加了用于 Voip 应用程序的呼叫检测的新功能,但如果您不是 voip 应用程序,您仍然无法获取来电(或去电)的号码。
首先您需要在应用程序设置中启用您的 CallBlocker 应用程序 为此,请遵循此 -
Go to Settings->Phone->Call blocking & identification->Enable your App.
之后使用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
中工作正常