Guia de início rápido: reagindo a mudanças na iluminação (C#)
Recolher sumário
Expandir sumário
Idioma: HTML | XAML

Guia de início rápido: reagindo a mudanças na iluminação (C#)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Você pode usar o sensor de luz ambiente para detectar as mudanças na iluminação com um aplicativo escrito em C#.

Um sensor de luz ambiente é um dos vários tipos de sensores de ambiente que permitem aos aplicativos reagir a mudanças no ambiente do usuário.

Mapa: como este tópico está relacionado aos outros? Consulte: Mapa de aplicativos do Tempo de Execução do Windows em C# ou Visual Basic.

O namespace Windows.Devices.Sensors inclui suporte para um objeto LightSensor que os aplicativos podem usar para recuperar a iluminação atual como um valor LUX. Para saber mais sobre valores LUX, consulte a documentação da API do Sensor no MSDN.

Objetivo: Depois de concluir esse guia de início rápido, você compreenderá como usar o sensor de luz para detectar mudanças na iluminação.

Pré-requisitos

Você deve estar familiarizado com XAML, Visual C# e eventos.

O dispositivo ou emulador que você está usando deve ter um sensor de luz ambiente.

Tempo para conclusão: 20 minutos.

Instruções

1. Abrir o Microsoft Visual Studio

Abra uma instância do Visual Studio.

2. Criar um novo projeto

Crie um novo projeto, escolhendo um Aplicativo em Branco nos tipos de projetos de Aplicativos Visual C#/Store.

3. Substituir o código C#

Abra o arquivo BlankPage.xaml.cs do projeto e substitua o código existente pelo seguinte.


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 http://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);
            }

        }

    }
}


Você precisará substituir o nome do namespace no trecho anterior pelo nome que você deu a seu projeto. Por exemplo, se você criou um projeto denominado LightingCS, pode substituir namespace App1 por namespace LightingCS.

4. Substituir o código XAML

Abra o arquivo MainPage.xaml e substitua o conteúdo original pelo seguinte 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>

Você precisará substituir a primeira parte do nome da classe no trecho anterior pelo namespace de seu aplicativo. Por exemplo, se você criou um projeto denominado LightingCS, pode substituir x:Class="App1.MainPage" por x:Class="LightingCS.MainPage". Você também deve substituir xmlns:local="using:App1" por xmlns:local="using:LightingCS".

5. Criar, implantar e executar o aplicativo

Pressione F5 ou selecione Depurar > Iniciar Depuração) para criar, implantar e executar o aplicativo.

Quando o arquivo está executando, você pode alterar os valores do acelerômetro movendo o dispositivo ou usando as ferramentas do emulador.

6. Parar o aplicativo

  1. Pressione Alt+Tab para retornar ao Visual Studio.
  2. Pressione Shift-F5 ou selecione Depurar > Parar Depuração) para parar o aplicativo.

Resumo

O exemplo anterior demonstra a codificação mínima que será necessária gravar para integrar a entrada do sensor de luz no aplicativo.

O aplicativo estabelece uma conexão com o sensor padrão no método BlankPage.


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

O aplicativo estabelece o intervalo de relatório dentro do método BlankPage. Este código recupera o intervalo mínimo suportado pelo dispositivo e o compara com um intervalo solicitado de 16 milissegundos (aproximadamente a uma taxa de atualização de 60-Hz). Se o intervalo mínimo suportado for maior que o intervalo solicitado, o código definirá valor mínimo. Caso contrário, ele define o valor como o intervalo solicitado.


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

Os novos dados do sensor de luz são capturados no método ReadingChanged. Toda vez que o driver do sensor recebe novos dados do sensor, ele transmite o valor para seu aplicativo usando este manipulador de eventos. O aplicativo registra este manipulador de eventos na seguinte linha.


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

Os novos valores são gravados em um TextBlock encontrado no XAML do projeto.


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


Tópicos relacionados

LightSensor class
Exemplo de LightSensor
Mapa para a criação de aplicativos da Windows Store em C#, C++ ou Visual Basic

 

 

Mostrar:
© 2017 Microsoft