你会想要实施application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool
在 AppDelegate 上。对于这个特殊的动作,userActivity
将有一个interaction
财产,具有intent
属性是一个实例INStartAudioCallIntent
(or INStartVideoCallIntent
如果您的应用程序播放视频)。
意图对象有一个数组INPerson
其上的联系人对象,可用于确定有关拨打的内容的信息。
如果您的应用程序没有将任何联系人加载到系统中,您的通话是一对一的(而不是群组),并且您只想访问“拨打的号码”,您可能会在以下位置找到您想要的内容intent.contacts?.first?.personHandle?.value
.
另请注意,您需要链接并导入Intents
框架。
Update
之前的回答只对了一半。有两种方法可以获取此信息,并且都应该实施。
当点击最近的项目(或选择联系人)时,将调用上面的 continueUserActivity 变体,并且你的应用程序已经在运行.
但是,如果您的应用程序当前未运行,那么它将启动并continueUserActivity
不会被调用。相反,系统将调用您的 AppDelegatedidFinishLaunchingWithOptions
with a UIApplicationLaunchOptionsKey.userActivityDictionary
,可以这样使用:
if let activityOptions = launchOptions?[UIApplicationLaunchOptionsKey.userActivityDictionary] as? [String: AnyObject],
let activity = activityOptions["UIApplicationLaunchOptionsUserActivityKey"] as? NSUserActivity {
self.launchWithActivity(activity)
}
一旦你拥有了NSUserActivity
例如,行为与continueUserActivity
再次更新
根据下面评论中的@vivek takrani,看来continueUserActivity
无论应用程序之前是否打开,都可以随时调用。如果您打算支持它,我会在 iOS 10 的早期版本上对此进行测试,因为我不认为撰写此答案时是这种情况。