Fotoğraflar ve videolar için medya seçici

Browse sample. Örneğe göz atın

Bu makalede .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) IMediaPicker arabirimini nasıl kullanabileceğiniz açıklanmaktadır. Bu arabirim, kullanıcının cihazda fotoğraf veya video seçmesine veya çekmesine olanak tanır.

Arabirimin IMediaPicker varsayılan uygulaması özelliği aracılığıyla MediaPicker.Default kullanılabilir. IMediaPicker Hem arabirim hem MediaPicker de sınıf ad alanında Microsoft.Maui.Media yer alır.

Başlarken

Medya seçici işlevselliğine erişmek için aşağıdaki platforma özgü kurulum gereklidir.

İzin CAMERA gereklidir ve Android projesinde yapılandırılmalıdır. Ek olarak:

  • Uygulamanız Android 12 veya daha düşük bir sürüme sahipse ve WRITE_EXTERNAL_STORAGE izinlerini istemeniz READ_EXTERNAL_STORAGE gerekir.

  • Uygulamanız Android 13 veya üzerini hedeflediyse ve diğer uygulamaların oluşturduğu medya dosyalarına erişmesi gerekiyorsa, izin yerine READ_EXTERNAL_STORAGE aşağıdaki ayrıntılı medya izinlerinden birini veya daha fazlasını istemeniz gerekir:

    • READ_MEDIA_IMAGES
    • READ_MEDIA_VIDEO
    • READ_MEDIA_AUDIO

Bu izinler aşağıdaki yollarla eklenebilir:

  • Derleme tabanlı izinleri ekleyin:

    Platforms/Android/MainApplication.cs dosyasını açın ve yönergelerin ardından using aşağıdaki derleme özniteliklerini ekleyin:

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

    - veya -

  • Android Bildirimini güncelleştirin:

    Platforms/Android/AndroidManifest.xml dosyasını açın ve düğüme manifest aşağıdakileri ekleyin:

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

    - veya -

  • Bildirim düzenleyicisinde Android Bildirimi'ni güncelleştirin:

    Visual Studio'da Platformlar/Android/AndroidManifest.xml dosyasına çift tıklayarak Android bildirim düzenleyicisini açın. Ardından, Gerekli izinler'in altında yukarıda listelenen izinleri denetleyin. Bu, AndroidManifest.xml dosyasını otomatik olarak güncelleştirir.

Projenizin Hedef Android sürümü Android 11 (R API 30) veya üzeri olarak ayarlandıysa, Android Bildiriminizi Android'in paket görünürlük gereksinimlerini kullanan sorgularla güncelleştirmeniz gerekir.

Platforms/Android/AndroidManifest.xml dosyasında düğüme aşağıdaki queries/intent düğümleri manifest ekleyin:

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

Medya seçiciyi kullanma

IMediaPicker Arabirim, dosyanın konumunu almak veya okumak için kullanılabilen bir döndüren FileResultaşağıdaki yöntemlere sahiptir.

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

Önemli

İzin denetimleri ve istekleri .NET MAUI tarafından otomatik olarak işlenmek için tüm yöntemlerin kullanıcı arabirimi iş parçacığında çağrılmalıdır.

Fotoğraf çekin

CapturePhotoAsync Kamerayı açmak ve kullanıcının fotoğraf çekmesine izin vermek için yöntemini çağırın. Kullanıcı fotoğraf çekerse yöntemin dönüş değeri null olmayan bir değer olur. Aşağıdaki kod örneği, bir fotoğraf çekmek ve önbellek dizinine kaydetmek için medya seçiciyi kullanır:

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

Bahşiş

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