使用 UIActivityViewController 共享各类文件
Use UIActivityViewController to share all types of files
我想使用 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 中,会发生什么情况?例如,参见 here。
字符串
var activityItems = new NSObject[] { UIActivity.FromObject(new NSString(text)) };
只有文字。
NSUrl
NSUrl url = NSUrl.CreateFileUrl(filepath, false, null);
在大多数情况下,这里会出现相同的应用程序。但是例如 PDF reader 不会出现在 PDF 文件中。另一边邮件中的预览显示的是 Adobe Acrobat。
一切
var activityItems = new NSObject[] { NSData.FromFile(filepath) };
最后一种方法的缺点是无法显示所有应用程序,例如可以打开 PDF 文件的应用程序。 this 也适用。
我想使用所有类型的文件。我不认为 UIActivity
的子类在这里有帮助。也许是 UIActivityItemProvider
?
的子类
旁注:您也可以在 Objective C/Swift.
中 post 您的解决方案
我尝试实施 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 reader 不应该真正支持文件类型 xml,但它确实支持。尽管如此,由于this post:
,它现在似乎可以工作了
In general if you’re sharing an image or url, you might want to use a UIActivityViewController. If you’re sharing a document, you might want to use a UIDocumentInteractionController.
我想使用 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 中,会发生什么情况?例如,参见 here。
字符串
var activityItems = new NSObject[] { UIActivity.FromObject(new NSString(text)) };
只有文字。
NSUrl
NSUrl url = NSUrl.CreateFileUrl(filepath, false, null);
在大多数情况下,这里会出现相同的应用程序。但是例如 PDF reader 不会出现在 PDF 文件中。另一边邮件中的预览显示的是 Adobe Acrobat。
一切
var activityItems = new NSObject[] { NSData.FromFile(filepath) };
最后一种方法的缺点是无法显示所有应用程序,例如可以打开 PDF 文件的应用程序。 this 也适用。
我想使用所有类型的文件。我不认为 UIActivity
的子类在这里有帮助。也许是 UIActivityItemProvider
?
旁注:您也可以在 Objective C/Swift.
中 post 您的解决方案我尝试实施 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 reader 不应该真正支持文件类型 xml,但它确实支持。尽管如此,由于this post:
,它现在似乎可以工作了In general if you’re sharing an image or url, you might want to use a UIActivityViewController. If you’re sharing a document, you might want to use a UIDocumentInteractionController.