1

我想使用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中發佈您的解決方案。

回答

3

我試圖實現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); 

Imho有太多的應用程序,因爲文件類型xml不應該真的被PDF閱讀器支持,但它是。然而,這似乎現在由於工作this post

一般來說,如果你要共享的圖像或網址,你可能需要使用一個UIActivityViewController。如果您要共享文檔,則可能需要使用UIDocumentInteractionController。

相關問題