如何识别和排除 UIActivityViewController 中的第 3 方 ActivityType(例如 'Send to Kindle'、'Chrome')?

How to identify & exclude 3rd-party ActivityType (e.g. 'Send to Kindle', 'Chrome') in a UIActivityViewController?

here & 所述,可以使用 UIActivityViewControllerexcludedActivityTypes 排除其他 ActivityType 选项,而不仅仅是那些预定义的选项。

但是,如何找到任何给定 ActivityType 的标识符(如果可能,最好以编程方式在 build-/run-time 处找到),然后将它们排除在外?

例如,我希望禁用 Send to KindleChrome.

在显示你的 UIActivityViewController 后 activity 找出第三方 activity 的 ActivityType,select。

调用完成处理程序时,您提供给 activity 控制器的完成 closure/block 有一个类型为 ActivityType 的参数,告诉您选择了哪一个。

例如:

activityVC.completionWithItemsHandler = { activity, success, items, error in
    print("activity: \(activity), success: \(success), items: \(items), error: \(error)")
}

现在您知道 ActivityType 对应 activity。更新您的代码以将该值添加到您传递给 excludedActivityTypes.

的列表中

仅供参考,根据@rmaddy 的出色回答,这些是 Send to Kindle[=25= 的特定标识符],如果有人感兴趣:

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 中。非常欢迎任何关于为什么以及如何解决这个问题的意见!