Senter bebas kamera

Artikel ini memperlihatkan cara mengakses dan menggunakan lampu perangkat, jika ada. Fungsionalitas lampu dikelola secara terpisah dari kamera perangkat dan fungsionalitas lampu kilat kamera. Selain memperoleh referensi ke lampu dan menyesuaikan pengaturannya, artikel ini juga menunjukkan cara membebaskan sumber daya lampu dengan benar saat tidak digunakan, dan cara mendeteksi kapan ketersediaan lampu berubah jika sedang digunakan oleh aplikasi lain.

Mendapatkan lampu default perangkat

Untuk mendapatkan perangkat lampu default perangkat, panggil Lamp.GetDefaultAsync. API lampu ditemukan di namespace Windows.Devices.Lights . Pastikan untuk menambahkan direktif penggunaan untuk namespace layanan ini sebelum mencoba mengakses API ini.

using Windows.Devices.Lights;
Lamp lamp;
lamp = await Lamp.GetDefaultAsync();

if (lamp == null)
{
    ShowErrorMessage("No Lamp device found");
    return;
}

Jika objek yang dikembalikan null, API Lampu tidak didukung pada perangkat. Beberapa perangkat mungkin tidak mendukung API Lampu meskipun ada lampu yang ada secara fisik pada perangkat.

Mendapatkan lampu tertentu menggunakan string pemilih lampu

Beberapa perangkat mungkin memiliki lebih dari satu lampu. Untuk mendapatkan daftar lampu yang tersedia di perangkat, dapatkan string pemilih perangkat dengan memanggil GetDeviceSelector. String pemilih ini kemudian dapat diteruskan ke DeviceInformation.FindAllAsync. Metode ini digunakan untuk menghitung berbagai jenis perangkat dan string pemilih memungkinkan metode mengetahui untuk mengembalikan hanya perangkat lampu. Objek DeviceInformationCollection yang dikembalikan dari FindAllAsync adalah kumpulan objek DeviceInformation yang mewakili lampu yang tersedia di perangkat. Pilih salah satu objek dalam daftar lalu teruskan properti Id ke Lamp.FromIdAsync untuk mendapatkan referensi ke lampu yang diminta. Contoh ini menggunakan metode ekstensi GetFirstOrDefault dari namespace System.Linq untuk memilih objek DeviceInformation tempat properti EnclosureLocation.Panel memiliki nilai Back, yang memilih lampu yang ada di bagian belakang enclosure perangkat, jika ada.

Perhatikan bahwa API DeviceInformation ditemukan di namespace Windows.Devices.Enumeration .

using Windows.Devices.Enumeration;
using System.Linq;
string selectorString = Lamp.GetDeviceSelector();


DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selectorString);

DeviceInformation deviceInfo =
    devices.FirstOrDefault(di => di.EnclosureLocation != null && 
        di.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back);

if (deviceInfo == null)
{
    ShowErrorMessage("No Lamp device found");
}

lamp = await Lamp.FromIdAsync(deviceInfo.Id);

Menyesuaikan pengaturan lampu

Setelah Anda memiliki instans kelas Lampu , nyalakan lampu dengan mengatur properti IsEnabled ke true.

lamp.IsEnabled = true;

Matikan lampu dengan mengatur properti IsEnabled ke false.

lamp.IsEnabled = false;

Beberapa perangkat memiliki lampu yang mendukung nilai warna. Periksa apakah lampu mendukung warna dengan memeriksa properti IsColorSettable . Jika nilai ini benar, Anda dapat mengatur warna lampu dengan properti Warna .

if (lamp.IsColorSettable)
{
    lamp.Color = Windows.UI.Colors.Blue;
}

Daftar untuk diberi tahu jika ketersediaan lampu berubah

Akses lampu diberikan ke aplikasi terbaru untuk meminta akses. Jadi, jika aplikasi lain diluncurkan dan meminta sumber daya lampu yang saat ini digunakan aplikasi Anda, aplikasi Anda tidak akan dapat lagi mengontrol lampu hingga aplikasi lain merilis sumber daya. Untuk menerima pemberitahuan saat ketersediaan lampu berubah, daftarkan handler untuk peristiwa Lamp.AvailabilityChanged .

lamp = await Lamp.GetDefaultAsync();

if (lamp == null)
{
    ShowErrorMessage("No Lamp device found");
    return;
}

lamp.AvailabilityChanged += Lamp_AvailabilityChanged;

Di handler untuk peristiwa, periksa properti LampAvailabilityChanged.IsAvailable untuk menentukan apakah lampu tersedia. Dalam contoh ini, sakelar pengalih untuk mengaktifkan dan menonaktifkan lampu diaktifkan atau dinonaktifkan berdasarkan ketersediaan lampu.

private void Lamp_AvailabilityChanged(Lamp sender, LampAvailabilityChangedEventArgs args)
{
    lampToggleSwitch.IsEnabled = args.IsAvailable;
}

Membuang sumber daya lampu dengan benar saat tidak digunakan

Ketika Anda tidak lagi menggunakan lampu, Anda harus menonaktifkannya dan memanggil Lamp.Close untuk merilis sumber daya dan memungkinkan aplikasi lain untuk mengakses lampu. Properti ini dipetakan ke metode Buang jika Anda menggunakan C#. Jika Anda mendaftar untuk AvailabilityChanged, Anda harus membatalkan pendaftaran handler saat Anda membuang sumber daya lampu. Tempat yang tepat dalam kode Anda untuk membuang sumber daya lampu tergantung pada aplikasi Anda. Untuk mencakup akses lampu ke satu halaman, rilis sumber daya di peristiwa OnNavigatingFrom .

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    lamp.AvailabilityChanged -= Lamp_AvailabilityChanged;
    lamp.IsEnabled = false;
    lamp.Dispose();
    lamp = null;
}