Sdílet prostřednictvím


Výběr médií pro fotky a videa

Projděte si ukázku. Procházení ukázky

Tento článek popisuje, jak můžete použít rozhraní .NET Multi-Platform App UI (.NET MAUI). IMediaPicker Toto rozhraní umožňuje uživateli vybrat nebo pořídit fotku nebo video na zařízení.

Výchozí implementace IMediaPicker rozhraní je k dispozici prostřednictvím MediaPicker.Default vlastnosti. Rozhraní IMediaPicker i MediaPicker třída jsou obsaženy v Microsoft.Maui.Media oboru názvů.

Začínáme

Pro přístup k funkcím pro výběr médií se vyžaduje následující nastavení specifické pro danou platformu.

Oprávnění CAMERA je povinné a musí být nakonfigurováno v projektu Android. Kromě toho:

  • Pokud vaše aplikace cílí na Android 12 nebo nižší, musíte požádat o READ_EXTERNAL_STORAGE oprávnění a WRITE_EXTERNAL_STORAGE oprávnění.

  • Pokud vaše aplikace cílí na Android 13 nebo vyšší a potřebuje přístup k multimediálním souborům, které vytvořily jiné aplikace, musíte místo oprávnění požádat o jedno nebo několik následujících podrobných oprávnění k médiím READ_EXTERNAL_STORAGE :

    • READ_MEDIA_IMAGES
    • READ_MEDIA_VIDEO
    • READ_MEDIA_AUDIO

Tato oprávnění je možné přidat následujícími způsoby:

  • Přidejte oprávnění založená na sestavení:

    Otevřete soubor Platforms/Android/MainApplication.cs a za direktivy using přidejte následující atributy sestavení:

    // Needed for Picking photo/video
    [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)]
    
    // Needed for Taking photo/video
    [assembly: UsesPermission(Android.Manifest.Permission.Camera)]
    [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage, MaxSdkVersion = 32)]
    
    // Add these properties if you would like to filter out devices that do not have cameras, or set to false to make them optional
    [assembly: UsesFeature("android.hardware.camera", Required = true)]
    [assembly: UsesFeature("android.hardware.camera.autofocus", Required = true)]
    

    - nebo -

  • Aktualizace manifestu Androidu:

    Otevřete soubor Platforms/Android/AndroidManifest.xml a do uzlu přidejte následujícímanifest:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.WRITE_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" />    
    

    - nebo -

  • Aktualizace manifestu Androidu v editoru manifestu:

    V sadě Visual Studio poklikejte na soubor Platforms/Android/AndroidManifest.xml a otevřete editor manifestu Androidu. Potom v části Požadovaná oprávnění zkontrolujte výše uvedená oprávnění. Tím se automaticky aktualizuje soubor AndroidManifest.xml .

Pokud je cílová verze androidu vašeho projektu nastavená na Android 11 (R API 30) nebo vyšší, musíte aktualizovat manifest Androidu pomocí dotazů, které používají požadavky na viditelnost balíčku Androidu.

V souboru Platformy/ Android/AndroidManifest.xml přidejte do uzlu následující queries/intent uzlymanifest:

<queries>
  <intent>
    <action android:name="android.media.action.IMAGE_CAPTURE" />
  </intent>
</queries>

Použití nástroje pro výběr médií

Rozhraní IMediaPicker má následující metody, které všechny vrací FileResult, které lze použít k získání umístění souboru nebo jeho čtení.

Každá metoda volitelně přebírá typ parametru MediaPickerOptions , který umožňuje Title nastavit v některých operačních systémech, které se uživateli zobrazí.

Důležité

Všechny metody musí být volána ve vlákně uživatelského rozhraní, protože kontroly oprávnění a požadavky se automaticky zpracovávají rozhraním .NET MAUI.

Pořízení fotky

Zavoláním CapturePhotoAsync metody otevřete fotoaparát a nechte uživatele pořídit fotku. Pokud uživatel pořídí fotku, návratová hodnota metody bude nenulová hodnota. Následující ukázka kódu používá nástroj pro výběr médií k pořízení fotky a jejímu uložení do adresáře mezipaměti:

public async void TakePhoto()
{
    if (MediaPicker.Default.IsCaptureSupported)
    {
        FileResult photo = await MediaPicker.Default.CapturePhotoAsync();

        if (photo != null)
        {
            // save the file into local storage
            string localFilePath = Path.Combine(FileSystem.CacheDirectory, photo.FileName);

            using Stream sourceStream = await photo.OpenReadAsync();
            using FileStream localFileStream = File.OpenWrite(localFilePath);

            await sourceStream.CopyToAsync(localFileStream);
        }
    }
}

Tip

Vlastnost FullPath nevrací vždy fyzickou cestu k souboru. K získání souboru použijte metodu OpenReadAsync .