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.
Pelajari cara menggunakan sensor cahaya sekitar untuk mendeteksi perubahan pencahayaan.
Contoh ini membuat aplikasi sederhana yang bergantung pada sensor cahaya sebagai perangkat input. Sensor cahaya sekitar adalah salah satu dari beberapa jenis sensor lingkungan yang memungkinkan aplikasi merespons perubahan di lingkungan pengguna.
- API penting:Windows.Devices.Sensors, LightSensor
Note
Artikel ini berfokus pada kode yang menunjukkan cara menggunakan sensor cahaya. Untuk gambaran umum sensor cahaya, lihat Sensor: Sensor cahaya.
Prasyarat
Anda harus terbiasa dengan sensor cahaya dan penggunaannya. Lihat Sensor: Sensor cahaya.
Perangkat atau emulator yang Anda gunakan harus mendukung sensor cahaya sekitar.
Contoh kode
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Controls;
using Windows.Devices.Sensors;
namespace DevicesDemo.Pages
{
public sealed partial class LightSensorPage : Page
{
private LightSensor? lightSensor;
public LightSensorPage()
{
InitializeComponent();
// Get the default light sensor object.
lightSensor = LightSensor.GetDefault();
if (lightSensor != null)
{
// Establish the report interval.
uint minReportInterval = lightSensor.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
lightSensor.ReportInterval = reportInterval;
// Assign an event handler for the reading-changed event.
lightSensor.ReadingChanged += LightSensor_ReadingChanged;
}
else
{
statusBar.Message = "No light sensor was found.";
statusBar.Severity = InfoBarSeverity.Error;
statusBar.IsOpen = true;
}
}
// This event handler writes the current light
// reading to the text block on the XAML page.
private void LightSensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
LightSensorReading reading = args.Reading;
txtLuxValue.Text = String.Format("{0,5:0.00}", reading.IlluminanceInLux);
});
}
}
}
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Margin="24">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="44"/>
<RowDefinition Height="44"/>
<RowDefinition Height="44"/>
</Grid.RowDefinitions>
<TextBlock Text="LUX Reading:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtLuxValue" Grid.Column="1" Text="---"/>
</Grid>
<InfoBar x:Name="statusBar" Grid.Row="1"/>
</Grid>
Saat aplikasi berjalan, Anda dapat mengubah nilai cahaya dengan menutupi dan mengungkap sensor cahaya.
Contoh sebelumnya menunjukkan kode penting yang perlu Anda tulis untuk mengintegrasikan input sensor cahaya ke dalam aplikasi Anda.
Menyambungkan ke sensor
Panggil metode GetDefault untuk membuat koneksi dengan sensor cahaya default.
private LightSensor? lightSensor;
// ...
lightSensor = LightSensor.GetDefault();
Anda juga dapat memanggil FromIdAsync untuk membuat objek LightSensor dari nilai DeviceInformation.Id. Untuk informasi selengkapnya, lihat Menghitung perangkat.
Jika tidak ada sensor sensor cahaya yang terdeteksi, pesan status diperbarui untuk memberi tahu pengguna.
Mengatur interval laporan
Interval laporan diatur dalam konstruktor halaman. Kode ini mengambil interval minimum yang didukung oleh perangkat dan membandingkannya dengan interval yang diminta sebesar 16 milidetik (yang perkiraan laju refresh 60 Hz). Jika interval minimum yang didukung lebih besar dari interval yang diminta, kode akan mengatur nilai ke minimum. Jika tidak, nilainya diatur ke interval yang diminta.
uint minReportInterval = lightSensor.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
lightSensor.ReportInterval = reportInterval;
Baca data sensor
Data sensor cahaya baru ditangkap dalam penangan aktivitas ReadingChanged. Setiap kali driver sensor menerima data baru dari sensor, driver tersebut meneruskan nilai ke aplikasi Anda menggunakan peristiwa ini. Untuk contoh ini, nilai baru ini ditulis ke blok teks yang ditemukan di XAML untuk halaman yang sesuai.
lightSensor.ReadingChanged += LightSensor_ReadingChanged;
// ...
private void LightSensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
LightSensorReading reading = args.Reading;
txtLuxValue.Text = String.Format("{0,5:0.00}", reading.IlluminanceInLux);
});
}
Topik terkait
Windows developer