Selektor plików
W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI). IFilePicker
Za pomocą interfejsu IFilePicker
możesz monitować użytkownika o wybranie co najmniej jednego pliku z urządzenia.
Domyślna implementacja interfejsu IFilePicker
jest dostępna za pośrednictwem FilePicker.Default
właściwości . Zarówno interfejs, jak IFilePicker
i FilePicker
klasa są zawarte w Microsoft.Maui.Storage
przestrzeni nazw.
Rozpocznij
Aby uzyskać dostęp do FilePicker funkcji, wymagana jest następująca konfiguracja specyficzna dla platformy.
Jeśli aplikacja jest przeznaczona READ_EXTERNAL_STORAGE
dla systemu Android 12 lub starszego, musisz zażądać uprawnienia. Jeśli aplikacja jest przeznaczona dla systemu Android 13 lub nowszego i wymaga dostępu do plików utworzonych przez inne aplikacje, musisz zażądać co najmniej jednego z następujących szczegółowych uprawnień zamiast READ_EXTERNAL_STORAGE
uprawnień:
READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
Te uprawnienia można dodać w następujący sposób:
Dodaj uprawnienie oparte na zestawie:
Otwórz plik Platformy/Android/MainApplication.cs i dodaj następujące atrybuty zestawu po
using
dyrektywach:[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)]
- lub -
Zaktualizuj manifest systemu Android:
Otwórz plik Platformy/Android/AndroidManifest.xml i dodaj następujący kod w węźle
manifest
:<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" />
- lub -
Zaktualizuj manifest systemu Android w edytorze manifestu:
W programie Visual Studio kliknij dwukrotnie plik Platformy/Android/AndroidManifest.xml , aby otworzyć edytor manifestu systemu Android. Następnie w obszarze Wymagane uprawnienia sprawdź uprawnienia wymienione powyżej. Spowoduje to automatyczne zaktualizowanie pliku AndroidManifest.xml .
Ważne
Wszystkie metody muszą być wywoływane w wątku interfejsu użytkownika, ponieważ kontrole uprawnień i żądania są automatycznie obsługiwane przez program .NET MAUI.
Wybierz plik
Metoda PickAsync
monituje użytkownika o wybranie pliku z urządzenia. PickOptions
Użyj typu , aby określić tytuł i typy plików dozwolone za pomocą selektora. W poniższym przykładzie pokazano otwarcie selektora i przetworzenie wybranego obrazu:
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;
}
Domyślne typy plików są dostarczane z elementami FilePickerFileType.Images
, FilePickerFileType.Png
i FilePickerFilerType.Videos
. Można określić niestandardowe typy plików na platformę, tworząc wystąpienie FilePickerFileType
klasy. Konstruktor tej klasy przyjmuje słownik, który jest kluczem typu DevicePlatform
w celu zidentyfikowania platformy. Wartość klucza słownika jest kolekcją ciągów reprezentujących typy plików. Na przykład poniżej przedstawiono sposób określania określonych typów plików komiksowych:
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,
};
Wyszukiwanie plików na podstawie typu pliku może różnić się od jednej platformy do drugiej. Aby uzyskać więcej informacji, zobacz Różnice między platformami.
Wybierz wiele plików
Jeśli chcesz, aby użytkownik wybrał wiele plików, wywołaj metodę FilePicker.PickMultipleAsync
. Ta metoda przyjmuje PickOptions
również parametr w celu określenia dodatkowych informacji. Wyniki są takie same jak PickAsync
, ale zamiast FileResult
zwracanego typu zwracany IEnumerable<FileResult>
jest typ ze wszystkimi wybranymi plikami.
Napiwek
Właściwość FullPath nie zawsze zwraca ścieżkę fizyczną do pliku. Aby pobrać plik, użyj OpenReadAsync metody .
Różnice między platformami
W tej sekcji opisano różnice specyficzne dla platformy w selektorze plików.
Element PickOptions.PickerTitle
jest wyświetlany w początkowym monicie dla użytkownika, ale nie w samym oknie dialogowym selektora.
Podczas filtrowania plików według typu użyj typu MIME pliku. Aby uzyskać listę typów MIME, zobacz Mozilla — typowe typy MIME.