Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Leer hoe u de versnellingsmeter gebruikt om te reageren op gebruikersbewegingen.
In dit voorbeeld wordt een eenvoudige app gemaakt die afhankelijk is van een versnellingsmeter als invoerapparaat. U kunt de versnellingsmeter gebruiken om te reageren wanneer een gebruiker het apparaat verplaatst. Een app op basis van een versnellingsmeter gebruikt doorgaans slechts één of twee assen voor invoer.
- Belangrijke API's:Windows.Devices.Sensors, Accelerometer
Note
Dit artikel is gericht op code die laat zien hoe u een versnellingsmeter gebruikt. Zie Sensoren: Accelerometer voor een overzicht van de versnellingsmetersensor.
Prerequisites
U moet bekend zijn met de versnellingsmetersensor en het gebruik ervan. Zie Sensoren: Versnellingsmeter.
Het apparaat dat u gebruikt, moet een versnellingsmeter ondersteunen.
Voorbeeldcode
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>
Wanneer de app wordt uitgevoerd, kunt u de versnellingsmeterwaarden wijzigen door het apparaat te verplaatsen.
In het vorige voorbeeld ziet u de essentiële code die u moet schrijven om accelerometerinvoer in uw app te integreren.
Verbinding maken met de sensor
Roep de GetDefault-methode aan om een verbinding tot stand te brengen met de standaard accelerometer.
private Accelerometer? accelerometer;
// ...
accelerometer = Accelerometer.GetDefault();
U kunt ook FromIdAsync aanroepen om een Accelerometer object te maken op basis van een DeviceInformation.Idwaarde. Zie Apparaten inventariseren voor meer informatie.
Als er geen versnellingsmetersensor wordt gedetecteerd, wordt het statusbericht bijgewerkt om de gebruiker hiervan op de hoogte te stellen.
Het rapportinterval instellen
Het rapportinterval wordt ingesteld in de constructor van de pagina. Met deze code wordt het minimale interval opgehaald dat door het apparaat wordt ondersteund en vergeleken met een aangevraagd interval van 16 milliseconden (wat een vernieuwingsfrequentie van 60 Hz bij benadering is). Als het minimaal ondersteunde interval groter is dan het aangevraagde interval, stelt de code de waarde in op het minimum. Anders wordt de waarde ingesteld op het aangevraagde interval.
uint minReportInterval = accelerometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
accelerometer.ReportInterval = reportInterval;
Sensorgegevens lezen
De nieuwe accelerometergegevens worden geregistreerd in de gebeurtenis-handler ReadingChanged. Telkens wanneer het sensorstuurprogramma nieuwe gegevens van de sensor ontvangt, worden de waarden aan uw app doorgegeven met behulp van deze gebeurtenis. In dit voorbeeld worden deze nieuwe waarden naar de tekstblokken geschreven die in de XAML voor de bijbehorende pagina zijn gevonden.
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);
});
}
U kunt de Shaken-gebeurtenis ook gebruiken als een andere invoerbron. Ondersteuning voor de Shaken gebeurtenis is afhankelijk van hardware- en stuurprogrammaondersteuning. In de praktijk ondersteunen zeer weinig versnellingsmeters het Shaken evenement.
Verwante onderwerpen
Windows developer