Selezione file
Questo articolo descrive come usare l'interfaccia dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI). IFilePicker
Con l'interfaccia IFilePicker
è possibile richiedere all'utente di selezionare uno o più file dal dispositivo.
L'implementazione predefinita dell'interfaccia IFilePicker
è disponibile tramite la FilePicker.Default
proprietà . Sia l'interfaccia che FilePicker
la IFilePicker
classe sono contenute nello spazio dei Microsoft.Maui.Storage
nomi .
Operazioni preliminari
Per accedere alla FilePicker funzionalità, è necessaria la configurazione specifica della piattaforma seguente.
Se l'app è destinata ad Android 12 o versione precedente, è necessario richiedere l'autorizzazione READ_EXTERNAL_STORAGE
. Se l'app è destinata ad Android 13 o versione successiva e deve accedere ai file creati da altre app, è necessario richiedere una o più delle autorizzazioni granulari seguenti anziché l'autorizzazione READ_EXTERNAL_STORAGE
:
READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
Queste autorizzazioni possono essere aggiunte nei modi seguenti:
Aggiungere l'autorizzazione basata su assembly:
Aprire il file Platforms/Android/MainApplication.cs e aggiungere gli attributi assembly seguenti dopo
using
le direttive:[assembly: UsesPermission(Android.Manifest.Permission.ReadExternalStorage, MaxSdkVersion = 32)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaAudio)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaImages)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaVideo)]
o
Aggiornare il manifesto Android:
Aprire il file Platforms/Android/AndroidManifest.xml e aggiungere quanto segue nel
manifest
nodo:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- Required only if your app needs to access images or photos that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- Required only if your app needs to access videos that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- Required only if your app needs to access audio files that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
o
Aggiornare il manifesto Android nell'editor del manifesto:
In Visual Studio fare doppio clic sul file Platforms/Android/AndroidManifest.xml per aprire l'editor del manifesto Android. Quindi, in Autorizzazioni necessarie controllare le autorizzazioni elencate in precedenza. Il file AndroidManifest.xml verrà aggiornato automaticamente.
Importante
Tutti i metodi devono essere chiamati nel thread dell'interfaccia utente perché i controlli delle autorizzazioni e le richieste vengono gestiti automaticamente da .NET MAUI.
Selezionare un file
Il PickAsync
metodo richiede all'utente di selezionare un file dal dispositivo. Usare il PickOptions
tipo per specificare il titolo e i tipi di file consentiti con la selezione. L'esempio seguente illustra l'apertura della selezione e l'elaborazione dell'immagine selezionata:
public async Task<FileResult> PickAndShow(PickOptions options)
{
try
{
var result = await FilePicker.Default.PickAsync(options);
if (result != null)
{
if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
{
using var stream = await result.OpenReadAsync();
var image = ImageSource.FromStream(() => stream);
}
}
return result;
}
catch (Exception ex)
{
// The user canceled or something went wrong
}
return null;
}
I tipi di file predefiniti vengono forniti con FilePickerFileType.Images
, FilePickerFileType.Png
e FilePickerFilerType.Videos
. È possibile specificare tipi di file personalizzati per ogni piattaforma creando un'istanza della FilePickerFileType
classe . Il costruttore di questa classe accetta un dizionario con chiave dal DevicePlatform
tipo per identificare la piattaforma. Il valore della chiave del dizionario è una raccolta di stringhe che rappresentano i tipi di file. Ad esempio, ecco come specificare tipi di file comici specifici:
var customFileType = new FilePickerFileType(
new Dictionary<DevicePlatform, IEnumerable<string>>
{
{ DevicePlatform.iOS, new[] { "public.my.comic.extension" } }, // UTType values
{ DevicePlatform.Android, new[] { "application/comics" } }, // MIME type
{ DevicePlatform.WinUI, new[] { ".cbr", ".cbz" } }, // file extension
{ DevicePlatform.Tizen, new[] { "*/*" } },
{ DevicePlatform.macOS, new[] { "cbr", "cbz" } }, // UTType values
});
PickOptions options = new()
{
PickerTitle = "Please select a comic file",
FileTypes = customFileType,
};
La ricerca di file in base al tipo di file può essere diversa da una piattaforma all'altra. Per altre informazioni, vedere Differenze della piattaforma.
Selezionare più file
Se si desidera che l'utente scegli più file, chiamare il FilePicker.PickMultipleAsync
metodo . Questo metodo accetta anche un PickOptions
parametro per specificare informazioni aggiuntive. I risultati sono uguali a PickAsync
, ma invece del FileResult
tipo restituito, viene restituito un IEnumerable<FileResult>
tipo con tutti i file selezionati.
Suggerimento
La FullPath proprietà non restituisce sempre il percorso fisico del file. Per ottenere il file, usare il OpenReadAsync metodo .
Differenze tra le piattaforme
Questa sezione descrive le differenze specifiche della piattaforma con la selezione file.
L'oggetto PickOptions.PickerTitle
viene visualizzato al prompt iniziale dell'utente, ma non nella finestra di dialogo di selezione stessa.
Quando si filtrano i file per tipo, usare il tipo MIME del file. Per un elenco dei tipi MIME, vedere Mozilla - Tipi MIME comuni.