Поделиться через


Использование датчика освещения

Узнайте, как использовать датчик внешнего света для обнаружения изменений в освещении.

Важные API

Необходимые компоненты

Вы должны быть знакомы с языком разметки расширяемых приложений (XAML), Microsoft Visual C# и событиями.

Устройство или эмулятор, которые вы используете, должно поддерживать датчик внешнего света.

Создание простого приложения датчика освещения

Датчик внешнего света является одним из нескольких типов датчиков окружающей среды, которые позволяют приложениям реагировать на изменения в среде пользователя.

Примечание.

Для более полной реализации см. пример датчика света.

Instructions

  • Создайте проект, выбрав пустое приложение (универсальное приложение Windows) из шаблонов проектов Visual C# .

  • Откройте файл BlankPage.xaml.cs проекта и замените существующий код следующим.

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

            }

        }
    }

Вам потребуется переименовать пространство имен в предыдущем фрагменте кода с именем, которым вы предоставили проект. Например, если вы создали проект с именем LightingCS, замените namespace App1 его namespace LightingCS.

  • Откройте файл MainPage.xaml и замените исходное содержимое следующим XML.
    <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>

Необходимо заменить первую часть имени класса в предыдущем фрагменте на пространство имен приложения. Например, если вы создали проект с именем LightingCS, замените x:Class="App1.MainPage" его x:Class="LightingCS.MainPage". Также следует заменить xmlns:local="using:App1" xmlns:local="using:LightingCS"на .

  • Нажмите клавишу F5 или выберите отладку отладки для>сборки, развертывания и запуска приложения.

После запуска приложения можно изменить значения датчика света, изменив свет, доступный датчику или используя средства эмулятора.

  • Остановите приложение, вернитесь в Visual Studio и нажав клавиши SHIFT+F5 или выберите "Остановить отладку отладки>", чтобы остановить приложение.

Описание

В предыдущем примере показано, как мало кода необходимо написать, чтобы интегрировать входные данные датчика света в приложение.

Приложение устанавливает соединение с датчиком по умолчанию в методе BlankPage .

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

Приложение устанавливает интервал отчета в методе BlankPage . Этот код извлекает минимальный интервал, поддерживаемый устройством, и сравнивает его с запрошенным интервалом в 16 миллисекунд (приблизительно 60-Гц скорость обновления). Если минимальный поддерживаемый интервал больше запрошенного интервала, код задает значение минимальному. В противном случае оно задает значение запрошенного интервала.

uint minReportInterval = _lightsensor.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_lightsensor.ReportInterval = reportInterval;

Новые данные датчика света записываются в методе ReadingChanged . Каждый раз, когда драйвер датчика получает новые данные от датчика, он передает значение приложению с помощью этого обработчика событий. Приложение регистрирует этот обработчик событий в следующей строке.

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

Эти новые значения записываются в TextBlock, найденный в XAML проекта.

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