Вы захотите реализовать application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool
в AppDelegate. Для этого конкретного действия userActivity
будет иметь свойство interaction
со свойством intent
, которое является экземпляром INStartAudioCallIntent
(или INStartVideoCallIntent
, если ваше приложение работает с видео).
Объект намерения содержит массив INPerson
объектов контактов, которые можно использовать для определения информации о том, что было набрано.
Если ваше приложение не загружает контакты в систему, ваши звонки являются индивидуальными (в отличие от групповых) и вы просто хотите получить доступ к «набранному номеру», вы, вероятно, найдете то, что хотите, на intent.contacts?.first?.personHandle?.value
.
Также обратите внимание, что вам нужно связать и импортировать фреймворк Intents
.
Обновить
Предыдущий ответ был правильным только наполовину. Есть два способа получить эту информацию, и оба должны быть реализованы.
Приведенный выше вариант continueUserActivity будет вызываться при нажатии элемента в списке последних (или выборе контакта), а ваше приложение уже запущено.
Однако, если ваше приложение в данный момент не запущено, оно будет запущено и continueUserActivity
вызываться не будет. Вместо этого система вызовет didFinishLaunchingWithOptions
вашего AppDelegate с 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, если вы собираетесь поддерживать его, поскольку я не верю, что это было так на момент написания этого ответа.
person
Colin M
schedule
30.09.2016