问题描述
我想使用 UIActivityViewController 从我的 iOS 应用程序中共享文件.我的主要问题是如何处理不同的文件类型.
到目前为止我得到了什么:
图片
public void OpenInExternalApp(string filepath) { if (!File.Exists(filepath)) return; UIImage uiImage = UIImage.FromFile(filepath); // Define the content to share var activityItems = new NSObject[] { uiImage }; UIActivity[] applicationActivities = null; var activityController = new UIActivityViewController(activityItems, applicationActivities); if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone) { // Phone UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(activityController, true, null); } else { // Tablet var popup = new UIPopoverController(activityController); UIView view = UIApplication.SharedApplication.KeyWindow.RootViewController.View; CGRect rect = new CGRect(view.Frame.Width/2, view.Frame.Height, 50, 50); popup.PresentFromRect(rect, view, UIPopoverArrowDirection.Any, true); } }
不知道从内存管理方面来看,一次加载图像是否是个好主意.如果图像太大而无法完全保存在 RAM 中会怎样?例如,请参阅此处.
字符串
var activityItems = new NSObject[] { UIActivity.FromObject(new NSString(text)) };
只有文字.
NSUrl
NSUrl url = NSUrl.CreateFileUrl(filepath, false, null);
在大多数情况下,会出现相同的应用程序.但例如,PDF 阅读器不会出现在 PDF 文件中.另一边邮件中的预览显示的是 Adobe Acrobat.
一切
var activityItems = new NSObject[] { NSData.FromFile(filepath) };
最后一种方法的缺点是无法显示所有应用程序,例如可以打开 PDF 文件.this 也适用.
我想使用所有类型的文件.我认为 UIActivity 的子类在这里没有帮助.也许是 UIActivityItemProvider 的子类?
附注:您也可以在 Objective C/Swift 中发布您的解决方案.
推荐答案
我尝试实现 UIActivityItemProvider,但这里再次显示的不是所有应用程序都针对相应的文件类型显示.例如.对于 docx 文档,Word 未显示.
现在我切换到 UIDocumentInteractionController,现在有很多应用程序可用.
UIDocumentInteractionController documentController = new UIDocumentInteractionController(); documentController.Url = new NSUrl(filepath, false); string fileExtension = Path.GetExtension(filepath).Substring(1); string uti = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension.ToString(), fileExtension, null); documentController.Uti = uti; UIView presentingView = UIApplication.SharedApplication.KeyWindow.RootViewController.View; documentController.PresentOpenInMenu(CGRect.Empty, presentingView, true);
恕我直言,应用程序太多了,因为 PDF 阅读器不应该真正支持 xml 文件类型,但它确实支持.尽管如此,由于 这篇文章,它现在似乎可以工作了::p><块引用>
一般来说,如果您要共享图像或 url,您可能希望使用 UIActivityViewController.如果您要共享文档,则可能需要使用 UIDocumentInteractionController.
相关问答
在UIActivityViewController中与不同的类型分享数据
UIActivityViewController 在whats应用程序中分享文本和所有分享选项
我可以使用UIActivityViewController来分享到Facebook吗?
iOS使用UIActivityViewController向Messenger分享GIF图片
使用UIActivityViewController将图片分享到LinkedIn的iOS系统
用UIActivityViewController分享5张以上的图片
ios - 如果用UIActivityViewController作出分享的按钮
无法使用 UIActivityViewController 将文本分享到 fb 信使
使用UIActivityViewController分享视频时,邮件没有附上视频
UIActivityViewController Gmail分享主题和正文是一样的