我想使用UIActivityViewController
從我的iOS應用程序共享文件。我的主要問題是如何處理不同的文件類型。使用UIActivityViewController共享所有類型的文件
什麼心中已經走到這一步:
圖片
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閱讀器不會出現在PDF文件中。另一面郵件預覽顯示Adobe Acrobat。
一切
var activityItems = new NSObject[] { NSData.FromFile(filepath) };
最後一種方法有未顯示所有的應用程序的缺點,這對於例如可以打開PDF文件。也適用this。
我想使用所有類型的文件。我不認爲UIActivity
的子類在這裏會有所幫助。也許是UIActivityItemProvider
的一個sublcass?
備註:您也可以在Objective C/Swift中發佈您的解決方案。