Use UIActivityViewController para compartilhar todos os tipos de arquivos
Eu quero usarUIActivityViewController
para compartilhar arquivos do meu aplicativo iOS. A principal questão para mim é como lidar com diferentes tipos de arquivos.
O que eu tenho até agora:
Imagens
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);
}
}
Não sei se pelo aspecto do gerenciamento de memória é uma boa ideia carregar a imagem de uma só vez. O que acontecerá se a imagem for muito grande para retê-la completamente na RAM? Vejoaqui por exemplo.
Cordas
var activityItems = new NSObject[] { UIActivity.FromObject(new NSString(text)) };
Apenas texto.
NSUrl
NSUrl url = NSUrl.CreateFileUrl(filepath, false, null);
Aqui, na maioria dos casos, o mesmo aplicativo aparece. Mas, por exemplo, o leitor de PDF não aparece para um arquivo PDF. A visualização no correio do outro lado mostra o Adobe Acrobat.
Tudo
var activityItems = new NSObject[] { NSData.FromFile(filepath) };
A última abordagem tem a desvantagem de que nem todos os aplicativos são exibidos, o que, por exemplo, pode abrir um arquivo PDF. Além dissoesta aplica-se.
Eu quero usar todos os tipos de arquivos. Eu não acho que uma subclasse deUIActivity
ajudaria aqui. Talvez um sublcass deUIActivityItemProvider
?
Nota lateral: Você também pode postar suas soluções no Objective C / Swift.