Bagikan melalui


Pemilih media untuk foto dan video

Telusuri sampel. Telusuri sampel

Artikel ini menjelaskan cara menggunakan antarmuka .NET Multi-platform App UI (.NET MAUI). IMediaPicker Antarmuka ini memungkinkan pengguna memilih atau mengambil foto atau video di perangkat.

Implementasi IMediaPicker default antarmuka tersedia melalui MediaPicker.Default properti . IMediaPicker Antarmuka dan MediaPicker kelas terkandung dalam Microsoft.Maui.Media namespace layanan.

Memulai

Untuk mengakses fungsionalitas pemilih media, diperlukan penyiapan khusus platform berikut.

Izin CAMERA diperlukan dan harus dikonfigurasi dalam proyek Android. Sebagai tambahan:

  • Jika aplikasi menargetkan Android 12 atau yang lebih rendah, Anda harus meminta READ_EXTERNAL_STORAGE izin dan WRITE_EXTERNAL_STORAGE .

  • Jika aplikasi Anda menargetkan Android 13 atau yang lebih tinggi dan memerlukan akses ke file media yang telah dibuat aplikasi lain, Anda harus meminta satu atau beberapa izin media terperinci berikut alih-alih READ_EXTERNAL_STORAGE izin:

    • READ_MEDIA_IMAGES
    • READ_MEDIA_VIDEO
    • READ_MEDIA_AUDIO

Izin ini dapat ditambahkan dengan cara berikut:

  • Tambahkan izin berbasis rakitan:

    Buka file Platforms/Android/MainApplication.cs dan tambahkan atribut assembly berikut setelah using direktif:

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

    - atau -

  • Perbarui Manifes Android:

    Buka file Platforms/Android/AndroidManifest.xml dan tambahkan yang berikut ini di nodemanifest:

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

    - atau -

  • Perbarui Manifes Android di editor manifes:

    Di Visual Studio klik dua kali pada file Platforms/Android/AndroidManifest.xml untuk membuka editor manifes Android. Kemudian, di bawah Izin yang diperlukan, periksa izin yang tercantum di atas. Ini akan secara otomatis memperbarui file AndroidManifest.xml .

Jika versi Target Android proyek Anda diatur ke Android 11 (R API 30) atau yang lebih tinggi, Anda harus memperbarui Android Manifest dengan kueri yang menggunakan persyaratan visibilitas paket Android.

Dalam file Platforms/Android/AndroidManifest.xml, tambahkan node berikut queries/intent di nodemanifest:

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

Menggunakan pemilih media

Antarmuka IMediaPicker memiliki metode berikut yang semuanya mengembalikan FileResult, yang dapat digunakan untuk mendapatkan lokasi file atau membacanya.

Setiap metode secara opsional mengambil MediaPickerOptions jenis parameter yang memungkinkan Title untuk diatur pada beberapa sistem operasi, yang ditampilkan kepada pengguna.

Penting

Semua metode harus dipanggil pada utas UI karena pemeriksaan izin dan permintaan secara otomatis ditangani oleh .NET MAUI.

Mengambil foto

CapturePhotoAsync Panggil metode untuk membuka kamera dan biarkan pengguna mengambil foto. Jika pengguna mengambil foto, nilai pengembalian metode akan menjadi nilai non-null. Sampel kode berikut menggunakan pemilih media untuk mengambil foto dan menyimpannya ke direktori cache:

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

Properti FullPath tidak selalu mengembalikan jalur fisik ke file. Untuk mendapatkan file, gunakan OpenReadAsync metode .