Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 danWRITE_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 node
manifest
:<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.
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 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 .