方位センサー
方位センサー(OrientationSensor)は端末が向いている方向を取得します。取得する値は回転行列と四元数という形で取得可能で、主に3D表現などのベクトル演算に利用します。
その他に、OrientationSensorより簡単な値を返すSimpleOrientationSensorがあります。
OrientationSensorの値を取得する
(サンプルファイル:「OrientationSensorSample.zip」)
方位センサーの値は以下のように取得します。
this._sensor = OrientationSensor.GetDefault(); if (this._sensor != null) { this._sensor.ReadingChanged += _sensor_ReadingChanged; } else { System.Diagnostics.Debug.WriteLine("OrientationSensor is null"); }
ReadingChangedで取得した値は以下のように取り出します。
async void _sensor_ReadingChanged(OrientationSensor sender, OrientationSensorReadingChangedEventArgs args) { OrientationSensorReading reading = args.Reading; // 四元数を取得する SensorQuaternion quaternion = reading.Quaternion; // 回転行列を取得する SensorRotationMatrix rotationMatrix = reading.RotationMatrix; await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { quaternionX.Text = String.Format("{0,8:0.00000}", quaternion.X); quaternionY.Text = String.Format("{0,8:0.00000}", quaternion.Y); quaternionZ.Text = String.Format("{0,8:0.00000}", quaternion.Z); quaternionW.Text = String.Format("{0,8:0.00000}", quaternion.W); matrix_11.Text = String.Format("{0,8:0.00000}", rotationMatrix.M11); matrix_12.Text = String.Format("{0,8:0.00000}", rotationMatrix.M12); matrix_13.Text = String.Format("{0,8:0.00000}", rotationMatrix.M13); matrix_21.Text = String.Format("{0,8:0.00000}", rotationMatrix.M21); matrix_22.Text = String.Format("{0,8:0.00000}", rotationMatrix.M22); matrix_23.Text = String.Format("{0,8:0.00000}", rotationMatrix.M23); matrix_31.Text = String.Format("{0,8:0.00000}", rotationMatrix.M31); matrix_32.Text = String.Format("{0,8:0.00000}", rotationMatrix.M32); matrix_33.Text = String.Format("{0,8:0.00000}", rotationMatrix.M33); }); }
サンプルコードのquaternionには四元数が、rotationMatrixには3×3の回転行列が格納されます。
SimpleOrientationSensorの値を取得する
SimpleOrientationSensorはデバイスの方向を簡単に表現したクラスです。以下のように値の変更を取得します。
this._simpleSensor = SimpleOrientationSensor.GetDefault(); if (this._simpleSensor != null) { this._simpleSensor.OrientationChanged += _simpleSensor_OrientationChanged; } else { System.Diagnostics.Debug.WriteLine("SimpleOrientationSensor is null"); }
ReadingChangedで取得した値は以下のように取り出します。
SimpleOrientation orientation = args.Orientation; await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { switch (orientation) { case SimpleOrientation.Facedown: this.orientation.Text = "デバイスは下向きです"; break; case SimpleOrientation.Faceup: this.orientation.Text = "デバイスは上向きです"; break; case SimpleOrientation.NotRotated: this.orientation.Text = "デバイスは回転していません"; break; case SimpleOrientation.Rotated180DegreesCounterclockwise: this.orientation.Text = "180度反時計回りに回転しています"; break; case SimpleOrientation.Rotated270DegreesCounterclockwise: this.orientation.Text = "270度反時計回りに回転しています"; break; case SimpleOrientation.Rotated90DegreesCounterclockwise: this.orientation.Text = "90度反時計回りに回転しています"; break; } });
端末の向きはSimpleOrientation列挙型で取得でき、それぞれの値は以下の意味を持ちます。
Facedown
端末は下向きで画面が伏せられています。
Faceup
端末は上向きで画面が表示されています。
NotRotated
端末は回転していません。
Rotated180DegreesCounterclockwise
反時計回りに180度回転しています。
Rotated270DegreesCounterclockwise
反時計回りに270度回転しています。
Rotated90DegreesCounterclockwise
反時計回りに90度回転しています。
光センサー
光センサーは端末のセンサー部が受け取る光の量を測定します。
光センサーの値を取得する
(サンプルファイル:「LightSensorSample.zip」)
光センサーの値の取得方法もこれまでと同様です。
this._sensor = LightSensor.GetDefault(); if (this._sensor != null) { this._sensor.ReadingChanged += _sensor_ReadingChanged; } else { System.Diagnostics.Debug.WriteLine("Light Sensor is Null"); }
ReadingChangedで取得した値は以下のように取り出します。
LightSensorReading reading = args.Reading; await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { this.LUX.Text = reading.IlluminanceInLux.ToString(); });
reading.IlluminanceInLuxの値は光量を表すルクスです。