(予め)本記事はプレビュー版の環境に基づいて書かれています。
Windows 1o Desctop Build 10240
Windows 1o Mobile Build 10166
Visual Studio 2015 RC
製品版では内容と異なる可能性もあります。
久しぶりにUWPアプリのサンプルからAccelerometerを紹介します。
加速度センサーは、文字通り端末にかかる加速度を測定します。
端末によって加速度センサーを搭載しているかどうかがわかれますので、まずは加速度センサーが搭載しているかを確認します。
今回は手元の環境で加速度センサー付きのWindows 10環境がWindows PhoneのLumia 1320のみでしたので、実機検証はWindows 10 Mobileのみとなります。
_accelerometer = Accelerometer.GetDefault(); if (_accelerometer != null) {
センサーが存在した場合、値の変化を読み取るイベントハンドラ―を設定します。
_accelerometer.ReadingChanged -= new TypedEventHandler<Accelerometer, AccelerometerReadingChangedEventArgs>(ReadingChanged); // Restore the default report interval to release resources while the sensor is not in use _accelerometer.ReportInterval = 0;
ReadingChangedイベントハンドラーで加速度計にかかる値の変化を取得します。
async private void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { AccelerometerReading reading = e.Reading; ScenarioOutput_X.Text = String.Format("{0,5:0.00}", reading.AccelerationX); ScenarioOutput_Y.Text = String.Format("{0,5:0.00}", reading.AccelerationY); ScenarioOutput_Z.Text = String.Format("{0,5:0.00}", reading.AccelerationZ); }); }
これはWindows 8.1のWindowsストアアプリと同じ流れですね。
端末が振られた(シェイクされた)際のイベントを取得することができます。
_accelerometer.Shaken -= new TypedEventHandler<Accelerometer, AccelerometerShakenEventArgs>(Shaken);
・・・んですが、手元の端末だとイベントが発生しない。
仔細未検証ですが、この辺も8.1のころと変わってないので、正式版ではちゃんと取れると思います。
ReadingChangedイベントハンドラ―ではなく、任意のタイミングでその時の値を取得するこもできます。
AccelerometerReading reading = _accelerometer.GetCurrentReading();
手もとの端末では以下の処理時にエラーになりました、
//Establish the report Latency accelerometer.ReportLatency = desiredReportLatency;
センサー系はまだ調整中という感じかなぁ。
Please give us your valuable comment