我已经在我的voip应用程序中实现了呼叫工具包,我在其中生成传入或传出呼叫的呼叫记录(在电话最近选项卡上可见)。
当我点击通话记录时,它将打开我的应用程序。我已覆盖UIApplication
委托方法以获取处理程序。
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler
但我无法在NSUserActivity
中获取与通话记录相关的信息。
我如何在我的应用程序中获取通话记录信息?
任何帮助都非常感激。谢谢!
答案 0 :(得分:3)
我们可以从 userActivity 中获取电话号码,
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restora`tionHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler{
INInteraction *interaction = userActivity.interaction;
INStartAudioCallIntent *startAudioCallIntent = (INStartAudioCallIntent *)interaction.intent;
INPerson *contact = startAudioCallIntent.contacts[0];
INPersonHandle *personHandle = contact.personHandle;
NSString *phoneNumber = personHandle.value;
}
答案 1 :(得分:2)
Swift 4中的完整解决方案
您需要配置您的应用程序才能继续调用userActivity。
在CXProviderConfiguration中添加supportedHandleTypes属性
let configuration = CXProviderConfiguration.init(localizedName:"Product name")
configuration.supportedHandleTypes = Set([CXHandle.HandleType.generic])
目标项目->构建阶段->库添加Intents.framework
下面是从userActivity中提取电话号码的代码
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
let intraction = userActivity.interaction
let startAudioCallIntent = intraction?.intent as? INStartAudioCallIntent
let contact = startAudioCallIntent?.contacts?[0]
let contactHandle = contact?.personHandle
if let phoneNumber = contactHandle?.value {
print(phoneNumber)
}
return true
}
希望这对您有所帮助。
答案 2 :(得分:0)
呼叫信息封装在INPerson对象中,可以从INInteraction对象进行解析。
向SiriKit提供联系人时,任何INInteraction对象 交付给其他应用程序包括INPerson中包含的信息 对象。不要包含您不愿意的任何信息 与其他应用共享。
您必须从NSActivity对象获取交互和意图对象。
in