Condividi
Questo articolo descrive come usare l'interfaccia dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI). IShare Questa interfaccia fornisce un'API per inviare dati, ad esempio collegamenti di testo o Web, alla funzione di condivisione dei dispositivi.
L'implementazione predefinita dell'interfaccia IShare
è disponibile tramite la Share.Default proprietà . Sia l'interfaccia che Share
la IShare
classe sono contenute nello spazio dei Microsoft.Maui.ApplicationModel.DataTransfer
nomi .
Quando viene effettuata una richiesta di condivisione, il dispositivo visualizza una finestra di condivisione, richiedendo all'utente di scegliere un'app con cui condividere:
Introduzione
Per accedere alla funzionalità Condividi , è necessaria la configurazione specifica della piattaforma seguente:
Non è necessaria alcuna configurazione.
Condividere testo e collegamenti
La funzionalità di condivisione funziona chiamando il RequestAsync metodo con un payload di dati che include informazioni da condividere con altre applicazioni. ShareTextRequest.Text e ShareTextRequest.Uri possono essere misti e ogni piattaforma gestirà il filtro in base al contenuto.
public async Task ShareText(string text)
{
await Share.Default.RequestAsync(new ShareTextRequest
{
Text = text,
Title = "Share Text"
});
}
public async Task ShareUri(string uri, IShare share)
{
await share.RequestAsync(new ShareTextRequest
{
Uri = uri,
Title = "Share Web Link"
});
}
Condividere un file
È anche possibile condividere file in altre applicazioni nel dispositivo. .NET MAUI rileva automaticamente il tipo di file (MIME) e richiede una condivisione. Tuttavia, i sistemi operativi possono limitare i tipi di file che possono essere condivisi. Per condividere un singolo file, usare il ShareFileRequest tipo .
L'esempio di codice seguente scrive un file di testo nel dispositivo e quindi richiede di condividerlo:
public async Task ShareFile()
{
string fn = "Attachment.txt";
string file = Path.Combine(FileSystem.CacheDirectory, fn);
File.WriteAllText(file, "Hello World");
await Share.Default.RequestAsync(new ShareFileRequest
{
Title = "Share text file",
File = new ShareFile(file)
});
}
Condividere più file
La condivisione di più file è leggermente diversa dalla condivisione di un singolo file. Per condividere un singolo file, usare il ShareMultipleFilesRequest tipo .
L'esempio di codice seguente scrive due file di testo nel dispositivo e quindi richiede di condividerli:
public async Task ShareMultipleFiles()
{
string file1 = Path.Combine(FileSystem.CacheDirectory, "Attachment1.txt");
string file2 = Path.Combine(FileSystem.CacheDirectory, "Attachment2.txt");
File.WriteAllText(file1, "Content 1");
File.WriteAllText(file2, "Content 2");
await Share.Default.RequestAsync(new ShareMultipleFilesRequest
{
Title = "Share multiple files",
Files = new List<ShareFile> { new ShareFile(file1), new ShareFile(file2) }
});
}
Posizione presentazione
Importante
Questa sezione si applica solo a iPadOS.
Quando si richiede una condivisione o si apre un'utilità di avvio in iPadOS, è possibile presentarla in un popover. Specifica dove verrà visualizzato il popover e puntare direttamente una freccia. Questa posizione è spesso il controllo che ha avviato l'azione. È possibile specificare la posizione usando la proprietà PresentationSourceBounds:
await Share.RequestAsync(new ShareFileRequest
{
Title = Title,
File = new ShareFile(file),
PresentationSourceBounds = DeviceInfo.Platform == DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
? new Rect(0, 20, 0, 0)
: Rect.Zero
});
await Launcher.OpenAsync(new OpenFileRequest
{
File = new ReadOnlyFile(file),
PresentationSourceBounds = DeviceInfo.Platform == DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
? new Rect(0, 20, 0, 0)
: Rect.Zero
});
Tutti gli elementi descritti qui funzionano allo stesso modo per Share e Launcher.
Ecco un metodo di estensione che consente di calcolare i limiti di una visualizzazione:
public static class ViewHelpers
{
public static Rect GetAbsoluteBounds(this Microsoft.Maui.Controls.View element)
{
Element looper = element;
var absoluteX = element.X + element.Margin.Top;
var absoluteY = element.Y + element.Margin.Left;
// Add logic to handle titles, headers, or other non-view bars
while (looper.Parent != null)
{
looper = looper.Parent;
if (looper is Microsoft.Maui.Controls.View v)
{
absoluteX += v.X + v.Margin.Top;
absoluteY += v.Y + v.Margin.Left;
}
}
return new Rect(absoluteX, absoluteY, element.Width, element.Height);
}
}
Questa operazione può quindi essere usata quando si chiama RequestAsync:
public Command<Microsoft.Maui.Controls.View> ShareCommand { get; } = new Command<Microsoft.Maui.Controls.View>(Share);
async void Share(Microsoft.Maui.Controls.View element)
{
try
{
await Share.Default.RequestAsync(new ShareTextRequest
{
PresentationSourceBounds = element.GetAbsoluteBounds(),
Title = "Title",
Text = "Text"
});
}
catch (Exception)
{
// Handle exception that share failed
}
}
È possibile passare l'elemento chiamante quando Command
viene attivato:
<Button Text="Share"
Command="{Binding ShareWithFriendsCommand}"
CommandParameter="{Binding Source={RelativeSource Self}}"/>
Per un esempio della ViewHelpers
classe , vedere l'esempio DI MAUI .NET ospitato in GitHub.
Differenze tra le piattaforme
Questa sezione descrive le differenze specifiche della piattaforma con l'API di condivisione.
- La ShareTextRequest.Subject proprietà viene utilizzata per l'oggetto desiderato di un messaggio.