如何在 UIActivityViewController 中识别和排除第 3 方 ActivityType(例如“发送到 Kindle”、“Chrome”)?
Posted
技术标签:
【中文标题】如何在 UIActivityViewController 中识别和排除第 3 方 ActivityType(例如“发送到 Kindle”、“Chrome”)?【英文标题】:How to identify & exclude 3rd-party ActivityType (e.g. 'Send to Kindle', 'Chrome') in a UIActivityViewController? 【发布时间】:2019-05-17 17:32:04 【问题描述】:正如here 和here 所讨论的,除了预定义的那些之外,还可以使用UIActivityViewController
的excludedActivityTypes
排除其他ActivityType
选项。
但是,如何找出任何给定 ActivityType
的标识符(如果可能,最好在构建/运行时以编程方式),然后可以将它们排除在外?
例如,我希望禁用 Send to Kindle 和 Chrome。
【问题讨论】:
【参考方案1】:要找出第三方活动的ActivityType
,请在显示您的UIActivityViewController
后选择该活动。
当调用完成处理程序时,您提供给活动控制器的完成闭包/块有一个类型为ActivityType
的参数,告诉您选择了哪个。
例如:
activityVC.completionWithItemsHandler = activity, success, items, error in
print("activity: \(activity), success: \(success), items: \(items), error: \(error)")
现在您知道该活动的 ActivityType
。更新您的代码以将该值添加到您传递给excludedActivityTypes
的列表中。
【讨论】:
谢谢!我花了一段时间才弄清楚如何做到这一点,所以我用一些示例代码编辑了你的答案。我还将编辑问题,以便更专注于获取任何活动的标识符。希望您能通过这种方式获得更多选票。 不幸的是,即使我从这个方法中得到了确切的标识符,它们仍然没有被排除在外。知道为什么这不起作用吗?let kindleActivity = UIActivity.ActivityType(rawValue: "com.amazon.Lassen.SendToKindleExtension"); let chromeActivity = UIActivity.ActivityType(rawValue: "com.google.chrome.ios.ShareExtension"); activityVC.excludedActivityTypes = [kindleActivity, chromeActivity]
不幸的是,UIActivityViewController 似乎并不支持您尝试排除的每种活动类型。我过去遇到过这个问题,我确信我也发布过类似的问题。这几乎就像您只能排除具有为 ActivityType 列出的常量的活动。
那真是太可惜了。似乎并非没有常数,因为我确实设法排除了 UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension")
和 UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension")
,它们似乎没有自己的,但它们也是 iOS 原生活动,所以这可能就是原因他们工作了。【参考方案2】:
仅供参考,由 @rmaddy 的出色回答确定,如果有人感兴趣,这些是 Send to Kindle 和 Chrome 的特定标识符:
let kindleActivity = UIActivity.ActivityType(rawValue: "com.amazon.Lassen.SendToKindleExtension")
let chromeActivity = UIActivity.ActivityType(rawValue: "com.google.chrome.ios.ShareExtension")
this answer to a related question 中已经定义了许多其他示例。
不幸的是,即使将这些添加到excludedActivityTypes
的数组中,它们似乎仍然出现在UIActivityViewController
中。非常欢迎任何关于为什么以及如何解决此问题的意见!
【讨论】:
以上是关于如何在 UIActivityViewController 中识别和排除第 3 方 ActivityType(例如“发送到 Kindle”、“Chrome”)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?