Bagikan melalui


Xamarin.Essentials: Pemilih Media

Kelas MediaPicker memungkinkan pengguna memilih atau mengambil foto atau video di perangkat.

Memulai

Untuk mulai menggunakan API ini, baca panduan memulai untuk Xamarin.Essentials memastikan pustaka diinstal dan disiapkan dengan benar di proyek Anda.

Untuk mengakses fungsionalitas MediaPicker , diperlukan penyiapan spesifik platform berikut.

Izin berikut diperlukan dan harus dikonfigurasi dalam proyek Android. Ini dapat ditambahkan dengan cara berikut:

Buka file AssemblyInfo.cs di bawah folder Properti dan tambahkan:

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

ATAU Perbarui Manifes Android:

Buka file AndroidManifest.xml di bawah folder Properti dan tambahkan yang berikut ini di dalam node manifes.

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

Atau klik kanan pada proyek Android dan buka properti proyek. Di bawah Manifes Android, temukan area Izin yang diperlukan: dan periksa izin ini. Ini akan secara otomatis memperbarui file AndroidManifest.xml .

Jika versi Target Android proyek Anda diatur ke Android 11 (R API 30) Anda harus memperbarui Android Manifest dengan kueri yang digunakan dengan persyaratan visibilitas paket baru.

Buka file AndroidManifest.xml di bawah folder Properti dan tambahkan yang berikut ini di dalam node manifes:

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

Menggunakan Pemilih Media

Kelas MediaPicker memiliki metode berikut yang semuanya mengembalikan FileResult yang dapat digunakan untuk mendapatkan lokasi file atau membacanya sebagai Stream.

  • PickPhotoAsync: Membuka browser media untuk memilih foto.
  • CapturePhotoAsync: Membuka kamera untuk mengambil foto.
  • PickVideoAsync: Membuka browser media untuk memilih video.
  • CaptureVideoAsync: Membuka kamera untuk mengambil video.

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

Tip

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

Penggunaan Umum

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

Tip

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

API