1

UIActivityViewController을 사용하여 iOS 앱의 파일을 공유하고 싶습니다. 가장 중요한 질문은 다른 파일 형식을 처리하는 방법입니다. I'v 지금까지 가지고 무엇 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); 

너무 많은 파일 유형 xml이 PDF 리더에서 실제로 지원되어서는 안되기 때문에 앱이 너무 많습니다. 그럼에도 불구하고, this post 지금 덕분에 작동하는 것 같다 :

일반적으로

당신은 이미지 나 URL을 공유하는 경우, 당신은 UIActivityViewController을 사용할 수 있습니다. 문서를 공유하는 경우 UIDocumentInteractionController를 사용할 수 있습니다.

관련 문제