Есть ли способ обнаружить, если пользователь нажимает принять или отклонить запрос Airdrop?

Итак, у меня работает функция airdrop, но мне нужны разные вещи, если пользователь нажимает принять и если пользователь нажимает deny для запроса airdrop.

В настоящее время те же действия происходят независимо от того, принимает или отклоняет пользователь запрос на сброс.

я использую

activityViewController.SetCompletionHandler(HandleActivityViewControllerCompletion);

который имеет эту подпись:

private async void HandleActivityViewControllerCompletion (NSString activityType, bool completed, NSExtensionItem[] returnedItems, NSError error)

Проблема не в том, что я могу использовать ни один из этих параметров. Завершено всегда возвращает true, если пользователь делает любой выбор, а returnItems имеет значение null.

Что я могу использовать или сделать, чтобы определить, отклонил ли пользователь запрос Airdrop?

Это для приложения Xamarin.iOS, но ответы в Swift/native iOS тоже подойдут.

Аналогичный вопрос SO без ответа: UIActivityViewController Airdrop - проверять статус, когда "отправлено" или "отклонено"

1 ответ

Решение

Хм, ладно, похоже, что взгляд в хрустальный шар неизбежен, чтобы ответить на это.

Я опробовал его на iOS 10.3.3, и, действительно, нет различий в поведении этого метода, независимо от того, был ли Airdrop принят другим устройством или отклонен.

По-видимому, completed логическое в HandleActivityViewControllerCompletion пока что это означает: "Данные были переданы выбранной деятельности" или "Данные не были переданы какой-либо деятельности". Это соответствует тому, говорит ли кнопка под общим листом "Готово" или "Отмена". К сожалению, действие airdrop устанавливает эту кнопку на Done, даже когда падение было отменено и хорошо, это имеет смысл, потому что она "что-то сделала".

Я думаю, что проблема (с точки зрения дизайна) заключается в том, что, как правило, действия (например, пользовательские) отклоняют всю UIActivityViewController когда они звонят activityDidFinish(_:), AidropActivity явно отличается тем, что , похоже, не делает этого вообще, просто отображает индикатор "Отклонено" под значком, когда соединение проходит, но другая сторона, ну, в общем, отклоняется. Плюс это меняет кнопку листа.

Кроме того, вся операция является асинхронной. Для меня это выглядит как активность Airdrop называет его perform() или же prepare(withActivityItems:) функция, запускает удаленное соединение асинхронно и сразу устанавливает кнопку "Готово" во время ее работы (я даже не вижу способа сделать это для других действий, но я не пробовал). Вы можете даже нажать Готово, прежде чем другая сторона примет или отклонит это, что не прервет передачу. Действие даже получает уведомление (если лист еще не был закрыт кнопкой "Готово"), чтобы обновить его значок.

В целом у него, кажется, есть особые привилегии, что имеет смысл, поскольку вся функциональность Airdrop особенная: он работает в фоновом режиме. Действие просто передает им данные, и как только это делается, само по себе также выполняется (независимо от результата).

Конечно, я согласен с тем, что этого недостаточно, но для его изменения, вероятно, потребуется, чтобы Apple изменила API. Так что это был бы запрос на добавление функций, я сильно сомневаюсь, что есть обходной путь (соответствует AppStore), о котором я не думал...

Другие вопросы по тегам