如何在 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 所讨论的,除了预定义的那些之外,还可以使用UIActivityViewControllerexcludedActivityTypes 排除其他ActivityType 选项。

但是,如何找出任何给定 ActivityType 的标识符(如果可能,最好在构建/运行时以编程方式),然后可以将它们排除在外?

例如,我希望禁用 Send to KindleChrome

【问题讨论】:

【参考方案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 KindleChrome 的特定标识符:

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 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?