我有一个共享位置信息的应用程序。我特别想将这些位置分享给Garmin Drive。在 Garmin Drive plist 中,它将 gps 文件列为使用 UTI
com.topografix.gpx
接受的文件
如果我做简单的事情,写一个最小的 GPX 文件并将它添加到
UIActivityViewController
的 ActivityItems(实际上我正在做的是写一个带有 GPX 扩展名的文件并共享该文件的 URL),我得到预期行为:Garmin Drive 在应用程序列表中并共享作品。然而,我也想分享给其他应用程序和内置系统服务,如消息和电子邮件。为此,我还在要共享的项目列表中添加了一个字符串。
这有效除了...我还在消息中得到了不理想的GPX文件。为了尝试将不同的数据返回给不同的应用程序,我专门尝试了各种其他方法
UIActivityItemSource
感觉它应该工作并且只允许我为我希望共享文件的应用程序返回一个gpx但是,当我将实现UIActivityItemSource
的对象添加到UIActivityViewController
的ActivityItems时,Garmin Drive不在应用程序列表中。
我将
"com.topografix.gpx"
返回给 dataTypeIdentifierForActivityType
- 在调用 itemForActivityType
之后调用两次以共享到粘贴板。即使我always返回GPX文件的UTI
func activityViewController(_: UIActivityViewController, dataTypeIdentifierForActivityType: UIActivity.ActivityType?) -> String {
return "com.topografix.gpx"
}
这意味着返回正确的数据类型标识符是行不通的,但只需共享一个指向具有 gpx 扩展名的文件的 URL 就可以了。
UIActivityViewController
的文档非常糟糕。对于听起来很有前途的UIActivityItemsConfiguration
来说更糟.
有谁知道活动控制器如何选择哪些应用程序可用作共享目的地。