Share via


Xamarin.Essentials: Medya Seçici

MediaPicker sınıfı, bir kullanıcının cihazda fotoğraf veya video seçmesine veya çekmesine olanak tanır.

Kullanmaya başlayın

Bu API'yi kullanmaya başlamak için kitaplığın projelerinizde düzgün yüklendiğinden ve ayarlandığından emin olmak için Xamarin.Essentials kullanmaya başlama kılavuzunu okuyun.

MediaPicker işlevine erişmek için aşağıdaki platforma özgü kurulum gereklidir.

Aşağıdaki izinler gereklidir ve Android projesinde yapılandırılmalıdır. Bu, aşağıdaki yollarla eklenebilir:

Özellikler klasörünün altındaki AssemblyInfo.cs dosyasını açın ve aşağıdakileri ekleyin:

// 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)]

VEYA Android Bildirimini Güncelleştir:

Özellikler klasörünün altındaki AndroidManifest.xml dosyasını açın ve bildirim düğümünün içine aşağıdakileri ekleyin.

<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" />

Veya Android projesine sağ tıklayıp projenin özelliklerini açın. Android Bildirimi altında Gerekli izinler: alanını bulun ve bu izinleri denetleyin. Bu, AndroidManifest.xml dosyasını otomatik olarak güncelleştirir.

Projenizin Hedef Android sürümü Android 11 (R API 30) olarak ayarlandıysa, Android Bildiriminizi yeni paket görünürlüğü gereksinimleriyle kullanılan sorgularla güncelleştirmeniz gerekir.

Özellikler klasörünün altındaki AndroidManifest.xml dosyasını açın ve bildirim düğümünün içine aşağıdakileri ekleyin:

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

Medya Seçici'yi kullanma

sınıfı, MediaPicker dosyaların konumunu almak veya olarak Streamokumak için kullanılabilecek bir FileResult döndüren aşağıdaki yöntemlere sahiptir.

  • PickPhotoAsync: Fotoğraf seçmek için medya tarayıcısını açar.
  • CapturePhotoAsync: Fotoğraf çekmek için kamerayı açar.
  • PickVideoAsync: Video seçmek için medya tarayıcısını açar.
  • CaptureVideoAsync: Video çekmek için kamerayı açar.

Her yöntem isteğe bağlı olarak, kullanıcılara görüntülenen bazı işletim sistemlerinde ayarlanmasını sağlayan Title bir MediaPickerOptions parametre alır.

İpucu

İzin denetimleri ve istekleri tarafından Xamarin.Essentialsotomatik olarak işlenmek için ui iş parçacığında tüm yöntemler çağrılmalıdır.

Genel Kullanım

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;
}

İpucu

FullPath özelliği her zaman dosyanın fiziksel yolunu döndürmez. Dosyayı almak için yöntemini kullanın OpenReadAsync .

API