Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pelajari cara menggunakan akselerometer untuk merespons pergerakan pengguna.
Contoh ini membuat aplikasi sederhana yang bergantung pada akselerometer sebagai perangkat input. Anda dapat menggunakan akselerometer untuk merespons saat pengguna memindahkan perangkat. Aplikasi berdasarkan akselerometer biasanya hanya menggunakan satu atau dua sumbu untuk input.
- API penting:Windows.Devices.Sensors, Accelerometer
Note
Artikel ini berfokus pada kode yang menunjukkan cara menggunakan akselerometer. Untuk gambaran umum sensor akselerometer, lihat Sensor: Akselerometer.
Prasyarat
Anda harus terbiasa dengan sensor akselerometer dan penggunaannya. Lihat Sensor: Akselerometer.
Perangkat yang Anda gunakan harus mendukung akselerometer.
Contoh kode
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>
Saat aplikasi berjalan, Anda dapat mengubah nilai akselerometer dengan memindahkan perangkat.
Contoh sebelumnya menunjukkan kode penting yang perlu Anda tulis untuk mengintegrasikan input akselerometer ke dalam aplikasi Anda.
Menyambungkan ke sensor
Panggil metode GetDefault untuk membuat koneksi dengan akselerometer default.
private Accelerometer? accelerometer;
// ...
accelerometer = Accelerometer.GetDefault();
Anda juga dapat memanggil FromIdAsync untuk membuat objek Accelerometer dari nilai DeviceInformation.Id. Untuk informasi selengkapnya, lihat Menghitung perangkat.
Jika tidak ada sensor akselerometer yang terdeteksi, pesan status diperbarui untuk memberi tahu pengguna.
Mengatur interval laporan
Interval laporan diatur dalam konstruktor halaman. 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 = accelerometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
accelerometer.ReportInterval = reportInterval;
Baca data sensor
Data akselerometer baru ditangkap dalam penangan peristiwa ReadingChanged. Setiap kali driver sensor menerima data baru dari sensor, driver tersebut meneruskan nilai ke aplikasi Anda menggunakan peristiwa ini. Untuk contoh ini, nilai baru ini ditulis ke blok teks yang ditemukan di XAML untuk halaman yang sesuai.
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);
});
}
Anda juga dapat menggunakan peristiwa Shaken sebagai sumber input lain. Dukungan untuk kejadian Shaken bergantung pada dukungan perangkat keras dan driver. Dalam praktiknya, sangat sedikit akselerometer yang mendukung acara tersebut Shaken .
Topik terkait
- sampel Accelerometer (UWP)
Windows developer