Výběr médií pro fotky a videa
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í aWRITE_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í.
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á 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 .