Xamarin.Essentials: Selektor multimediów
Klasa MediaPicker pozwala użytkownikowi wybrać lub zrobić zdjęcie lub wideo na urządzeniu.
Aby rozpocząć korzystanie z tego interfejsu API, przeczytaj przewodnik wprowadzający , Xamarin.Essentials aby upewnić się, że biblioteka jest prawidłowo zainstalowana i skonfigurowana w projektach.
Aby uzyskać dostęp do funkcji platformy MediaPicker , wymagana jest następująca konfiguracja specyficzna dla platformy.
Następujące uprawnienia są wymagane i muszą być skonfigurowane w projekcie systemu Android. Można to dodać w następujący sposób:
Otwórz plik AssemblyInfo.cs w folderze Właściwości i dodaj:
// 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)]
LUB Zaktualizuj manifest systemu Android:
Otwórz plik AndroidManifest.xml w folderze Właściwości i dodaj następujący element w węźle manifestu.
<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" />
Możesz też kliknąć prawym przyciskiem myszy projekt systemu Android i otworzyć właściwości projektu. W obszarze Manifest systemu Android znajdź wymagane uprawnienia: obszar i sprawdź te uprawnienia. Spowoduje to automatyczne zaktualizowanie pliku AndroidManifest.xml .
Jeśli docelowa wersja systemu Android projektu jest ustawiona na Android 11 (R API 30), musisz zaktualizować manifest systemu Android za pomocą zapytań, które są używane z nowymi wymaganiami dotyczącymi widoczności pakietu.
Otwórz plik AndroidManifest.xml w folderze Właściwości i dodaj następujące elementy w węźle manifestu:
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
Klasa MediaPicker
ma następujące metody, które zwracają FileResult
element , który może służyć do pobrania lokalizacji plików lub odczytania go jako Stream
.
PickPhotoAsync
: Otwiera przeglądarkę multimediów, aby wybrać zdjęcie.CapturePhotoAsync
: Otwiera aparat, aby zrobić zdjęcie.PickVideoAsync
: Otwiera przeglądarkę multimediów, aby wybrać film wideo.CaptureVideoAsync
: Otwiera kamerę, aby wykonać wideo.
Każda metoda opcjonalnie przyjmuje MediaPickerOptions
parametr, który umożliwia Title
ustawienie elementu w niektórych systemach operacyjnych wyświetlanych użytkownikom.
Porada
Wszystkie metody muszą być wywoływane w wątku interfejsu użytkownika, ponieważ kontrole uprawnień i żądania są automatycznie obsługiwane przez Xamarin.Essentialsprogram .
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;
}
Porada
Właściwość FullPath
nie zawsze zwraca ścieżkę fizyczną do pliku. Aby pobrać plik, użyj OpenReadAsync
metody .