Xamarin.Essentials: Výběr médií

Třída MediaPicker umožňuje uživateli vybrat nebo pořídit fotku nebo video na zařízení.

Začínáme

Pokud chcete začít používat toto rozhraní API, přečtěte si úvodní příručkuXamarin.Essentials, abyste měli jistotu, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.

Pro přístup k funkcím MediaPickeru se vyžaduje následující nastavení specifické pro platformu.

Vyžaduje se následující oprávnění a musí být nakonfigurovaná v projektu Android. Můžete ho přidat následujícími způsoby:

Otevřete soubor AssemblyInfo.cs ve složce Vlastnosti a přidejte:

// Needed for Picking photo/video
[assembly: UsesPermission(Android.Manifest.Permission.ReadExternalStorage)]

// Needed for Taking photo/video
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
[assembly: UsesPermission(Android.Manifest.Permission.Camera)]

// 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 Aktualizovat manifest Androidu:

Otevřete soubor AndroidManifest.xml ve složce Vlastnosti a do uzlu manifestu přidejte následující kód.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

Nebo klikněte pravým tlačítkem na projekt Androidu a otevřete vlastnosti projektu. V části Manifest pro Android vyhledejte požadovaná oprávnění: oblast a zkontrolujte tato 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), musíte aktualizovat manifest Androidu pomocí dotazů, které se používají s novými požadavky na viditelnost balíčku.

Otevřete soubor AndroidManifest.xml ve složce Vlastnosti a přidejte do uzlu manifestu následující kód:

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

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

Třída MediaPicker má následující metody, které všechny vracejí FileResult , které lze použít k získání umístění souborů nebo čtení jako Stream.

  • PickPhotoAsync: Otevře prohlížeč médií a vybere fotku.
  • CapturePhotoAsync: Otevře fotoaparát pro pořízení fotky.
  • PickVideoAsync: Otevře prohlížeč médií a vybere video.
  • CaptureVideoAsync: Otevře kameru pro pořízení videa.

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

Tip

Všechny metody musí být volána ve vlákně uživatelského rozhraní, protože kontroly oprávnění a požadavky jsou automaticky zpracovávány Xamarin.Essentials.

Obecné použití

async Task TakePhotoAsync()
{
    try
    {
        var photo = await MediaPicker.CapturePhotoAsync();
        await LoadPhotoAsync(photo);
        Console.WriteLine($"CapturePhotoAsync COMPLETED: {PhotoPath}");
    }
    catch (FeatureNotSupportedException fnsEx)
    {
        // Feature is not supported on the device
    }
    catch (PermissionException pEx)
    {
        // Permissions not granted
    }
    catch (Exception ex)
    {
        Console.WriteLine($"CapturePhotoAsync THREW: {ex.Message}");
    }
}

async Task LoadPhotoAsync(FileResult photo)
{
    // canceled
    if (photo == null)
    {
        PhotoPath = null;
        return;
    }
    // save the file into local storage
    var newFile = Path.Combine(FileSystem.CacheDirectory, photo.FileName);
    using (var stream = await photo.OpenReadAsync())
    using (var newStream = File.OpenWrite(newFile))
        await stream.CopyToAsync(newStream);

    PhotoPath = newFile;
}

Tip

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

rozhraní API