Bagikan melalui


Menggunakan sensor cahaya

Pelajari cara menggunakan sensor cahaya sekitar untuk mendeteksi perubahan pencahayaan.

API penting

Prasyarat

Anda harus terbiasa dengan Extensible Application Markup Language (XAML), Microsoft Visual C#, dan peristiwa.

Perangkat atau emulator yang Anda gunakan harus mendukung sensor cahaya sekitar.

Membuat aplikasi sensor cahaya sederhana

Sensor cahaya sekitar adalah salah satu dari beberapa jenis sensor lingkungan yang memungkinkan aplikasi merespons perubahan di lingkungan pengguna.

Catatan

Untuk implementasi yang lebih lengkap, lihat sampel sensor cahaya.

Petunjuk

  • Buat proyek baru, pilih Aplikasi Kosong (Universal Windows) dari templat proyek Visual C# .

  • Buka file BlankPage.xaml.cs proyek Anda dan ganti kode yang ada dengan yang berikut ini.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;

    using Windows.UI.Core; // Required to access the core dispatcher object
    using Windows.Devices.Sensors; // Required to access the sensor platform and the ALS

    // The Blank Page item template is documented at https://go.microsoft.com/fwlink/p/?linkid=234238

    namespace App1
    {
        /// <summary>
        /// An empty page that can be used on its own or navigated to within a Frame.
        /// </summary>
        public sealed partial class BlankPage : Page
        {
            private LightSensor _lightsensor; // Our app' s lightsensor object

            // This event handler writes the current light-sensor reading to
            // the textbox named "txtLUX" on the app' s main page.

            private void ReadingChanged(object sender, LightSensorReadingChangedEventArgs e)
            {
                Dispatcher.RunAsync(CoreDispatcherPriority.Normal, (s, a) =>
                {
                    LightSensorReading reading = (a.Context as LightSensorReadingChangedEventArgs).Reading;
                    txtLuxValue.Text = String.Format("{0,5:0.00}", reading.IlluminanceInLux);
                });
            }

            public BlankPage()
            {
                InitializeComponent();
                _lightsensor = LightSensor.GetDefault(); // Get the default light sensor object

                // Assign an event handler for the ALS reading-changed event
                if (_lightsensor != null)
                {
                    // Establish the report interval for all scenarios
                    uint minReportInterval = _lightsensor.MinimumReportInterval;
                    uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
                    _lightsensor.ReportInterval = reportInterval;

                    // Establish the even thandler
                    _lightsensor.ReadingChanged += new TypedEventHandler<LightSensor, LightSensorReadingChangedEventArgs>(ReadingChanged);
                }

            }

        }
    }

Anda harus mengganti nama namespace layanan di cuplikan sebelumnya dengan nama yang Anda berikan pada proyek Anda. Misalnya, jika Anda membuat proyek bernama LightingCS, Anda akan mengganti namespace App1 dengan namespace LightingCS.

  • Buka file MainPage.xaml dan ganti konten asli dengan XML berikut.
    <Page
        x:Class="App1.BlankPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:App1"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">

        <Grid x:Name="LayoutRoot" Background="Black">
            <TextBlock HorizontalAlignment="Left" Height="44" Margin="52,38,0,0" TextWrapping="Wrap" Text="LUX Reading" VerticalAlignment="Top" Width="150"/>
            <TextBlock x:Name="txtLuxValue" HorizontalAlignment="Left" Height="44" Margin="224,38,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="217"/>


        </Grid>

    </Page>

Anda harus mengganti bagian pertama dari nama kelas di cuplikan sebelumnya dengan namespace aplikasi Anda. Misalnya, jika Anda membuat proyek bernama LightingCS, Anda akan mengganti x:Class="App1.MainPage" dengan x:Class="LightingCS.MainPage". Anda juga harus mengganti xmlns:local="using:App1" dengan xmlns:local="using:LightingCS".

  • Tekan F5 atau pilih Debug>Mulai Debugging untuk membangun, menyebarkan, dan menjalankan aplikasi.

Setelah aplikasi berjalan, Anda dapat mengubah nilai sensor cahaya dengan mengubah cahaya yang tersedia untuk sensor atau menggunakan alat emulator.

  • Hentikan aplikasi dengan kembali ke Visual Studio dan tekan Shift+F5 atau pilih Debug>Hentikan Penelusuran Kesalahan untuk menghentikan aplikasi.

Penjelasan

Contoh sebelumnya menunjukkan bagaimana kode kecil yang perlu Anda tulis untuk mengintegrasikan input sensor cahaya di aplikasi Anda.

Aplikasi ini membuat koneksi dengan sensor default dalam metode BlankPage .

_lightsensor = LightSensor.GetDefault(); // Get the default light sensor object

Aplikasi menetapkan interval laporan dalam metode BlankPage . 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;

Data sensor cahaya baru diambil dalam metode ReadingChanged . Setiap kali driver sensor menerima data baru dari sensor, driver tersebut meneruskan nilai ke aplikasi Anda menggunakan penanganan aktivitas ini. Aplikasi ini mendaftarkan penanganan aktivitas ini pada baris berikut.

_lightsensor.ReadingChanged += new TypedEventHandler<LightSensor,
LightSensorReadingChangedEventArgs>(ReadingChanged);

Nilai baru ini ditulis ke TextBlock yang ditemukan di XAML proyek.

<TextBlock HorizontalAlignment="Left" Height="44" Margin="52,38,0,0" TextWrapping="Wrap" Text="LUX Reading" VerticalAlignment="Top" Width="150"/>
 <TextBlock x:Name="txtLuxValue" HorizontalAlignment="Left" Height="44" Margin="224,38,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="217"/>