Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como usar o acelerômetro para responder à movimentação do usuário.
Este exemplo cria um aplicativo simples que depende de um acelerômetro como um dispositivo de entrada. Você pode usar o acelerômetro para responder quando um usuário move o dispositivo. Um aplicativo baseado em um acelerômetro normalmente usa apenas um ou dois eixos para entrada.
- Important APIs:Windows.Devices.Sensors, Accelerometer
Note
Este artigo se concentra no código que demonstra como usar um acelerômetro. Para obter uma visão geral do sensor de acelerômetro, consulte Sensores: Acelerômetro.
Prerequisites
Você deve estar familiarizado com o sensor de acelerômetro e seus usos. Consulte Sensores: Acelerômetro.
O dispositivo que você está usando deve dar suporte a um acelerômetro.
Código de exemplo
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Controls;
using Windows.Devices.Sensors;
namespace DevicesDemo.Pages
{
public sealed partial class AccelerometerPage : Page
{
private Accelerometer? accelerometer;
public AccelerometerPage()
{
InitializeComponent();
// Get the default accelerometer sensor object.
accelerometer = Accelerometer.GetDefault();
if (accelerometer != null)
{
// Establish the report interval.
uint minReportInterval = accelerometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
accelerometer.ReportInterval = reportInterval;
// Assign an event handler for the reading-changed event.
accelerometer.ReadingChanged += Accelerometer_ReadingChanged;
}
else
{
statusBar.Message = "No accelerometer was found.";
statusBar.Severity = InfoBarSeverity.Error;
statusBar.IsOpen = true;
}
}
// This event handler writes the current accelerometer reading to
// the three acceleration text blocks on the XAML page.
private void Accelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
AccelerometerReading reading = args.Reading;
txtXAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
txtYAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
txtZAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);
});
}
}
}
<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="X-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtXAxis" Grid.Column="1" Text="---"/>
<TextBlock Grid.Row="1" Text="Y-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtYAxis" Grid.Column="1" Grid.Row="1" Text="---"/>
<TextBlock Grid.Row="2" Text="Z-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtZAxis" Grid.Column="1" Grid.Row="2" Text="---"/>
</Grid>
<InfoBar x:Name="statusBar" Grid.Row="1"/>
</Grid>
Quando o aplicativo é executado, você pode alterar os valores do acelerômetro movendo o dispositivo.
O exemplo anterior demonstra o código essencial que você precisa escrever para integrar a entrada do acelerômetro ao seu aplicativo.
Conectar-se ao sensor
Chame o método GetDefault para estabelecer uma conexão com o acelerômetro padrão.
private Accelerometer? accelerometer;
// ...
accelerometer = Accelerometer.GetDefault();
Você também pode chamar FromIdAsync para criar um objeto Accelerometer de um valor DeviceInformation.Id. Para obter mais informações, consulte Enumerar dispositivos.
Se nenhum sensor de acelerômetro for detectado, a mensagem de status será atualizada para informar o usuário.
Definir o intervalo de relatório
O intervalo de relatório é definido dentro do construtor da página. Esse código recupera o intervalo mínimo com suporte do dispositivo e o compara a um intervalo solicitado de 16 milissegundos (que aproxima uma taxa de atualização de 60 Hz). Se o intervalo mínimo com suporte for maior que o intervalo solicitado, o código definirá o valor como o mínimo. Caso contrário, define o valor para o intervalo solicitado.
uint minReportInterval = accelerometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
accelerometer.ReportInterval = reportInterval;
Ler dados do sensor
Os novos dados do acelerômetro são capturados no manipulador de eventos ReadingChanged . Sempre que o driver do sensor recebe novos dados do sensor, ele passa os valores para seu aplicativo usando esse evento. Para este exemplo, esses novos valores são gravados nos blocos de texto encontrados no XAML da página correspondente.
accelerometer.ReadingChanged += Accelerometer_ReadingChanged;
// ...
private void Accelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
AccelerometerReading reading = args.Reading;
txtXAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
txtYAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
txtZAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);
});
}
Você também pode usar o evento Shaken como outra fonte de entrada. O suporte ao evento Shaken depende do suporte do hardware e do driver. Na prática, pouquíssimos acelerômetros dão suporte ao Shaken evento.
Tópicos relacionados:
Windows developer