デバイス センサーへのアクセス

Browse sample. サンプルを参照する

デバイスには、使用可能なすべての種類のセンサーがあります。 センサーの中には、動きを検出できるセンサーもあれば、光などの環境の変化を検出できるものもあります。 これらのセンサーの監視と対応により、デバイスの使用方法に合わせてアプリが動的になります。 センサーの変更に対応し、ユーザーに警告することもできます。 この記事では、.NET マルチプラットフォーム アプリ UI (.NET MAUI) でサポートされる一般的なセンサーの概要について説明します。

デバイス センサー関連の型は、Microsoft.Maui.Devices.Sensors 名前空間で使用できます。

センサー速度

センサー速度は、センサーがアプリにデータを返す速度を設定します。 センサーを起動するときに、SensorSpeed 列挙型を使用して、必要なセンサー速度を指定します。

  • Fastest
    センサー データをできるだけ速く取得します (UI スレッド上で返るとは限りません)。

  • Game
    ゲームに適した速度です (UI スレッド上で返るとは限りません)。

  • UI
    一般的なユーザー インターフェイスに適した速度です。

  • Default
    画面の向きの変化に適した既定の速度です。

警告

一度に監視するセンサーが多すぎると、センサー データがアプリに返される速度に影響が出る可能性があります。

.NET 8 では、SensorSpeed 間隔はすべてのプラットフォームで同じです。

  • Default は 200 ミリ秒の間隔を使用します。
  • UI は 60 ミリ秒の間隔を使用します。
  • Game は 20 ミリ秒の間隔を使用します。
  • Fastest は 5 ミリ秒の間隔を使用します。

センサー イベント ハンドラー

Game または Fastest のいずれかの速度でセンサーに追加されたイベント ハンドラーは、UI スレッドでの実行が保証されていません。 イベント ハンドラーがユーザー インターフェイス要素にアクセスする必要がある場合は、MainThread.BeginInvokeOnMainThread メソッドを使用して、そのコードを UI スレッドで実行します。

加速度計

加速度計センサーは、3 つの軸に沿ってデバイスの加速度を測定します。 センサーによって報告されるデータは、ユーザーがデバイスを移動する方法を表します。

IAccelerometer インターフェイスは、このセンサーへのアクセスを提供し、Accelerometer.Default プロパティを通じて使用できます。 IAccelerometer インターフェイスと Accelerometer クラスは、どちらも Microsoft.Maui.Devices.Sensors 名前空間に含まれています。

作業の開始

加速度計の機能にアクセスするには、次のプラットフォーム固有のセットアップが必要になる場合があります。

アプリが Android 12 以上 (API 31 以上) をターゲットにする場合、システムは、このセンサーからのデータのリフレッシュ レートに 200 Hz の制限を設定します。 アプリで Fastest センサー速度を使用してセンサー データを収集する必要がある場合は、HIGH_SAMPLING_RATE_SENSORS アクセス許可を宣言する必要があります。 次の方法でアクセス許可を設定できます。

  • アセンブリベースのアクセス許可を追加します。

    Platforms/Android/MainApplication.cs ファイルを開き、using ディレクティブの後に次のアセンブリ属性を追加します。

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    または

  • Android マニフェストを更新します。

    Platforms/Android/AndroidManifest.xml ファイルを開き、manifest ノードに次の行を追加します。

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    または

  • マニフェスト エディターで Android マニフェストを更新します。

    Visual Studio で、Platforms/Android/AndroidManifest.xml ファイルをダブルクリックして、Android マニフェスト エディターを開きます。 次に、[必要なアクセス許可] で、[HIGH_SAMPLING_RATE_SENSORS] アクセス許可をチェックします。 これにより、AndroidManifest.xml ファイルが自動的に更新されます。

Note

ユーザーがデバイスのトグルを使用してマイク アクセスをオフにした場合、HIGH_SAMPLING_RATE_SENSORS アクセス許可を宣言するかどうかに関係なく、モーション センサーと位置センサーは常にレート制限されます。

加速度計センサーを監視する

加速度計センサーの監視を開始するには、IAccelerometer.Start メソッドを呼び出します。 .NET MAUI は、IAccelerometer.ReadingChanged イベントを発生させることで、加速度計データの変更をアプリに送信します。 センサーの監視を停止するには、IAccelerometer.Stop メソッドを使用します。 IAccelerometer.IsMonitoring プロパティを使用して、加速度計の監視状態を検出できます。これは、加速度計が開始され、現在監視されている場合に true になります。

次のコード例は、加速度計の変更を監視する方法を示しています。

public void ToggleAccelerometer()
{
    if (Accelerometer.Default.IsSupported)
    {
        if (!Accelerometer.Default.IsMonitoring)
        {
            // Turn on accelerometer
            Accelerometer.Default.ReadingChanged += Accelerometer_ReadingChanged;
            Accelerometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off accelerometer
            Accelerometer.Default.Stop();
            Accelerometer.Default.ReadingChanged -= Accelerometer_ReadingChanged;
        }
    }    
}

private void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
{
    // Update UI Label with accelerometer state
    AccelLabel.TextColor = Colors.Green;
    AccelLabel.Text = $"Accel: {e.Reading}";
}

加速度計の測定値は、G を単位として報告されます。G は地球の重力場による重力の単位 $(9.81 m/s^2)$ です。

座標系は、既定の向きのデバイス画面を基準として相対的に定義されます。 デバイスの画面の向きが変わっても、軸は切り替わりません。

X 軸は水平方向で右に、Y 軸は垂直方向で上に、Z 軸は画面前面から外側に向かいます。 この座標系では、画面より後ろに位置する座標の Z 値は負の値になります。

次に例を示します。

  • テーブルの上に水平に置いたデバイスの左側を右側に向かって押した場合、X の加速値は正の値になります。

  • デバイスがテーブルの上に水平に置かれている場合、加速度値は +1.00 G つまり $(+9.81 m/s^2)$ になります。これは、デバイスの加速度値 $(0 m/s^2)$ から重力値 $(-9.81 m/s^2)$ を差し引き、G の単位に正規化したものに相当します。

  • テーブルの上に水平に置いたデバイスを加速度 A $m/s^2$ で上に持ち上げた場合、加速度値は $A+9.81$ と等しくなります。これは、デバイスの加速度値 $(+A m/s^2)$ から重力値 $(-9.81 m/s^2)$ を差し引き、G の単位に正規化したものに相当します。

プラットフォーム固有の情報 (加速度計)

加速度計センサーに関連するプラットフォーム固有の情報はありません。

Barometer

バロメーター センサーは、周囲の空気圧を測定します。 センサーによって報告されるデータは、現在の気圧を表します。 このデータは、センサーの監視を初めて開始した後、圧力が変化するたびに報告されます。

IBarometer インターフェイスはセンサーへのアクセスを提供し、Barometer.Default プロパティを通じて利用できます。 IBarometer インターフェイスと Barometer クラスは、どちらも Microsoft.Maui.Devices.Sensors 名前空間に含まれています。

バロメーター センサーの監視を開始するには、IBarometer.Start メソッドを呼び出します。 .NET MAUI は、IBarometer.ReadingChanged イベントを発生させることで、アプリに気圧の測定値を送信します。 センサーの監視を停止するには、IBarometer.Stop メソッドを使用します。 IBarometer.IsMonitoring プロパティを使用して、気圧計の監視状態を検出できます。これは、気圧計が現在監視されている場合に true になります。

圧力読み取り値はヘクトパスカルで表されます。

次のコード例は、バロメーターによる変更の監視を示しています。

public void ToggleBarometer()
{
    if (Barometer.Default.IsSupported)
    {
        if (!Barometer.Default.IsMonitoring)
        {
            // Turn on barometer
            Barometer.Default.ReadingChanged += Barometer_ReadingChanged;
            Barometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off barometer
            Barometer.Default.Stop();
            Barometer.Default.ReadingChanged -= Barometer_ReadingChanged;
        }
    }
}

private void Barometer_ReadingChanged(object sender, BarometerChangedEventArgs e)
{
    // Update UI Label with barometer state
    BarometerLabel.TextColor = Colors.Green;
    BarometerLabel.Text = $"Barometer: {e.Reading}";
}

プラットフォーム固有の情報 (バロメーター)

このセクションでは、バロメーター センサーに関連するプラットフォーム固有の実装の詳細について説明します。

プラットフォーム固有の実装の詳細はありません。

コンパス

コンパス センサーは、デバイスの磁北方位を監視します。

ICompass インターフェイスはセンサーへのアクセスを提供し、Compass.Default プロパティを通じて利用できます。 ICompass インターフェイスと Compass クラスは、どちらも Microsoft.Maui.Devices.Sensors 名前空間に含まれています。

コンパス センサーの監視を開始するには、ICompass.Start メソッドを呼び出します。 .NET MAUI では、コンパスの方位が変更されたときに ICompass.ReadingChanged イベントが発生します。 センサーの監視を停止するには、ICompass.Stop メソッドを使用します。 ICompass.IsMonitoring プロパティを使用してコンパスの監視状態を検出できます。コンパスが現在監視されている場合、このプロパティは true になります。

次のコード例は、コンパスの変更を監視する方法を示しています。

private void ToggleCompass()
{
    if (Compass.Default.IsSupported)
    {
        if (!Compass.Default.IsMonitoring)
        {
            // Turn on compass
            Compass.Default.ReadingChanged += Compass_ReadingChanged;
            Compass.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off compass
            Compass.Default.Stop();
            Compass.Default.ReadingChanged -= Compass_ReadingChanged;
        }
    }
}

private void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
    // Update UI Label with compass state
    CompassLabel.TextColor = Colors.Green;
    CompassLabel.Text = $"Compass: {e.Reading}";
}

プラットフォーム固有の情報 (コンパス)

このセクションでは、コンパス機能に関連するプラットフォーム固有の実装の詳細について説明します。

Android には、コンパスの方位を取得するための API はありません。 .NET MAUI では、Google の推奨に従い、加速度計センサーと磁力計センサーを使用して磁北方位を計算します。

まれに、センサーの調整が必要なために、一貫性のない結果が表示されることがあります。 Android でのコンパスの再調整は、携帯電話のモデルと Android のバージョンによって異なります。 コンパスを再調整する方法については、インターネットを検索する必要があります。 コンパスの再調整に役立つ可能性のあるリンクを 2 つ次に示します。

アプリから同時に複数のセンサーを実行すると、センサー速度が遅くなる可能性があります。

ローパス フィルター

Android コンパスの値がどのように更新および計算されるかによって、値の平滑化が必要になる場合があります。 角度のサイン値とコサイン値の平均を計算するローパス フィルターを適用でき、Start メソッド オーバーロードを使用して有効にできます。このメソッドは bool applyLowPassFilter パラメーターを受け取ります。

Compass.Default.Start(SensorSpeed.UI, applyLowPassFilter: true);

これは、Android のプラットフォームでのみ適用され、iOS と Windows ではこのパラメーターが無視されます。 詳細については、こちらの GitHub イシューのコメントを参照してください

シェイク

この記事ではシェイクがセンサーとして記載されてはいますが、実際はそうではありません。 デバイスがシェイクされたときにそれを検出するには、加速度計が使用されます。

IAccelerometer インターフェイスは、このセンサーへのアクセスを提供し、Accelerometer.Default プロパティを通じて使用できます。 IAccelerometer インターフェイスと Accelerometer クラスは、どちらも Microsoft.Maui.Devices.Sensors 名前空間に含まれています。

Note

アプリで Fastest センサー速度を使用して加速度計センサー データを収集する必要がある場合は、HIGH_SAMPLING_RATE_SENSORS アクセス許可を宣言する必要があります。 詳細については、「加速度計」をご覧ください。

Detect Shake API では、加速度計で読み取られた値が未加工のまま使用され、加速が計算されます。 単純なキュー メカニズムを利用し、最近の加速度計イベントの 3/4 が最後の 0.5 秒以内に発生したかどうかを検出します。 加速度は、加速度計から読み取った X、Y、Z 値の平方和 ($x^2+y^2+z^2$) を特定のしきい値と比較することで計算されます。

加速度計センサーの監視を開始するには、IAccelerometer.Start メソッドを呼び出します。 シェイクが検出されると、IAccelerometer.ShakeDetected イベントが発生します。 センサーの監視を停止するには、IAccelerometer.Stop メソッドを使用します。 IAccelerometer.IsMonitoring プロパティを使用して加速度計の監視状態を検出できます。加速度計が開始されて、現在監視されている場合は true になります。

SensorSpeed には Game 以上の速度を使用することをお勧めします。

次のコード例は、加速度計の ShakeDetected イベントを監視する方法を示しています。

private void ToggleShake()
{
    if (Accelerometer.Default.IsSupported)
    {
        if (!Accelerometer.Default.IsMonitoring)
        {
            // Turn on accelerometer
            Accelerometer.Default.ShakeDetected += Accelerometer_ShakeDetected;
            Accelerometer.Default.Start(SensorSpeed.Game);
        }
        else
        {
            // Turn off accelerometer
            Accelerometer.Default.Stop();
            Accelerometer.Default.ShakeDetected -= Accelerometer_ShakeDetected;
        }
    }
}

private void Accelerometer_ShakeDetected(object sender, EventArgs e)
{
    // Update UI Label with a "shaked detected" notice, in a randomized color
    ShakeLabel.TextColor = new Color(Random.Shared.Next(256), Random.Shared.Next(256), Random.Shared.Next(256));
    ShakeLabel.Text = $"Shake detected";
}

プラットフォーム固有の情報 (シェイク)

加速度計センサーに関連するプラットフォーム固有の情報はありません。

ジャイロスコープ

ジャイロスコープ センサーは、デバイスの 3 つの主軸の周りの角回転速度を測定します。

IGyroscope インターフェイスはセンサーへのアクセスを提供し、Gyroscope.Default プロパティを通じて利用できます。 IGyroscope インターフェイスと Gyroscope クラスは、どちらも Microsoft.Maui.Devices.Sensors 名前空間に含まれています。

作業の開始

ジャイロスコープの機能にアクセスするには、次のプラットフォーム固有のセットアップが必要になる場合があります。

アプリが Android 12 以上 (API 31 以上) をターゲットにする場合、システムは、このセンサーからのデータのリフレッシュ レートに 200 Hz の制限を設定します。 アプリで Fastest センサー速度を使用してセンサー データを収集する必要がある場合は、HIGH_SAMPLING_RATE_SENSORS アクセス許可を宣言する必要があります。 次の方法でアクセス許可を設定できます。

  • アセンブリベースのアクセス許可を追加します。

    Platforms/Android/MainApplication.cs ファイルを開き、using ディレクティブの後に次のアセンブリ属性を追加します。

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    または

  • Android マニフェストを更新します。

    Platforms/Android/AndroidManifest.xml ファイルを開き、manifest ノードに次の行を追加します。

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    または

  • マニフェスト エディターで Android マニフェストを更新します。

    Visual Studio で、Platforms/Android/AndroidManifest.xml ファイルをダブルクリックして、Android マニフェスト エディターを開きます。 次に、[必要なアクセス許可] で、[HIGH_SAMPLING_RATE_SENSORS] アクセス許可をチェックします。 これにより、AndroidManifest.xml ファイルが自動的に更新されます。

Note

ユーザーがデバイスのトグルを使用してマイク アクセスをオフにした場合、HIGH_SAMPLING_RATE_SENSORS アクセス許可を宣言するかどうかに関係なく、モーション センサーと位置センサーは常にレート制限されます。

ジャイロスコープ センサーを監視する

ジャイロスコープ センサーの監視を開始するには、IGyroscope.Start メソッドを呼び出します。 .NET MAUI は、IGyroscope.ReadingChanged イベントを発生させてジャイロスコープ データの変化をアプリに送信します。 このイベントによって提供されるデータは、rad/s (1 秒あたりのラジアン) で測定されます。 センサーの監視を停止するには、IGyroscope.Stop メソッドを使用します。 ジャイロスコープの監視状態は、IGyroscope.IsMonitoring プロパティで検出できます。このプロパティは、ジャイロスコープが動作を開始して現在監視されている場合 true になります。

次のコード例は、ジャイロスコープの監視を示しています。

private void ToggleGyroscope()
{
    if (Gyroscope.Default.IsSupported)
    {
        if (!Gyroscope.Default.IsMonitoring)
        {
            // Turn on gyroscope
            Gyroscope.Default.ReadingChanged += Gyroscope_ReadingChanged;
            Gyroscope.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off gyroscope
            Gyroscope.Default.Stop();
            Gyroscope.Default.ReadingChanged -= Gyroscope_ReadingChanged;
        }
    }
}

private void Gyroscope_ReadingChanged(object sender, GyroscopeChangedEventArgs e)
{
    // Update UI Label with gyroscope state
    GyroscopeLabel.TextColor = Colors.Green;
    GyroscopeLabel.Text = $"Gyroscope: {e.Reading}";
}

プラットフォーム固有の情報 (ジャイロスコープ)

ジャイロスコープ センサーに関連する、プラットフォーム固有の情報はありません。

磁力計

磁力計センサーは、地球の磁場を基準にしてデバイスの相対的な向きを示します。

IMagnetometer インターフェイスは、このセンサーへのアクセスを提供し、Magnetometer.Default プロパティを通じて使用できます。 IMagnetometer インターフェイスと Magnetometer クラスはどちらも Microsoft.Maui.Devices.Sensors 名前空間に含まれています。

作業の開始

磁力計の機能にアクセスするには、次のプラットフォーム固有のセットアップが必要になる場合があります。

アプリが Android 12 以上 (API 31 以上) をターゲットにする場合、システムは、このセンサーからのデータのリフレッシュ レートに 200 Hz の制限を設定します。 アプリで Fastest センサー速度を使用してセンサー データを収集する必要がある場合は、HIGH_SAMPLING_RATE_SENSORS アクセス許可を宣言する必要があります。 次の方法でアクセス許可を設定できます。

  • アセンブリベースのアクセス許可を追加します。

    Platforms/Android/MainApplication.cs ファイルを開き、using ディレクティブの後に次のアセンブリ属性を追加します。

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    または

  • Android マニフェストを更新します。

    Platforms/Android/AndroidManifest.xml ファイルを開き、manifest ノードに次の行を追加します。

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    または

  • マニフェスト エディターで Android マニフェストを更新します。

    Visual Studio で、Platforms/Android/AndroidManifest.xml ファイルをダブルクリックして、Android マニフェスト エディターを開きます。 次に、[必要なアクセス許可] で、[HIGH_SAMPLING_RATE_SENSORS] アクセス許可をチェックします。 これにより、AndroidManifest.xml ファイルが自動的に更新されます。

Note

ユーザーがデバイスのトグルを使用してマイク アクセスをオフにした場合、HIGH_SAMPLING_RATE_SENSORS アクセス許可を宣言するかどうかに関係なく、モーション センサーと位置センサーは常にレート制限されます。

磁力計センサーを監視する

磁力計センサーの監視を開始するには、IMagnetometer.Start メソッドを呼び出します。 .NET MAUI は、IMagnetometer.ReadingChanged イベントを発生させて磁力計データの変化をアプリに送信します。 このイベントで提供されるデータは、$μT$ (マイクロテスラ) 単位で測定されます。 センサーの監視を停止するには、IMagnetometer.Stop メソッドを使用します。 磁力計の監視状態は IMagnetometer.IsMonitoring プロパティで検出できます。このプロパティは、磁力計が動作を開始して現在監視されている場合 true になります。

次のコード例は、磁力計の監視を示しています。

private void ToggleMagnetometer()
{
    if (Magnetometer.Default.IsSupported)
    {
        if (!Magnetometer.Default.IsMonitoring)
        {
            // Turn on magnetometer
            Magnetometer.Default.ReadingChanged += Magnetometer_ReadingChanged;
            Magnetometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off magnetometer
            Magnetometer.Default.Stop();
            Magnetometer.Default.ReadingChanged -= Magnetometer_ReadingChanged;
        }
    }
}

private void Magnetometer_ReadingChanged(object sender, MagnetometerChangedEventArgs e)
{
    // Update UI Label with magnetometer state
    MagnetometerLabel.TextColor = Colors.Green;
    MagnetometerLabel.Text = $"Magnetometer: {e.Reading}";
}

プラットフォーム固有の情報 (磁力計)

磁力計センサーに関連する、プラットフォーム固有の情報はありません。

向き

向きセンサーは、3 次元空間内のデバイスの向きを監視します。

Note

このセンサーは、デバイスのビデオ ディスプレイが縦長モードか横長モードかの判断には使用されません。 代わりに、DeviceDisplay.Current.MainDisplayInfo.Orientation プロパティを使用してください。 詳細については、「デバイス ディスプレイ情報」をご覧ください。

IOrientationSensor インターフェイスは、このセンサーへのアクセスを提供し、OrientationSensor.Default プロパティを通じて使用できます。 IOrientationSensor インターフェイスと OrientationSensor クラスは、どちらも Microsoft.Maui.Devices.Sensors 名前空間に含まれています。

向きセンサーの監視を開始するには、IOrientationSensor.Start メソッドを呼び出します。 .NET MAUI は、IOrientationSensor.ReadingChanged イベントを発生させて向きデータの変化をアプリに送信します。 センサーの監視を停止するには、IOrientationSensor.Stop メソッドを使用します。 向きセンサーの監視状態は、IOrientationSensor.IsMonitoring プロパティで検出できます。このプロパティは、向きセンサーが動作を開始して現在監視されている場合 true になります。

次のコード例は、向きセンサーの監視を示しています。

private void ToggleOrientation()
{
    if (OrientationSensor.Default.IsSupported)
    {
        if (!OrientationSensor.Default.IsMonitoring)
        {
            // Turn on orientation
            OrientationSensor.Default.ReadingChanged += Orientation_ReadingChanged;
            OrientationSensor.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off orientation
            OrientationSensor.Default.Stop();
            OrientationSensor.Default.ReadingChanged -= Orientation_ReadingChanged;
        }
    }
}

private void Orientation_ReadingChanged(object sender, OrientationSensorChangedEventArgs e)
{
    // Update UI Label with orientation state
    OrientationLabel.TextColor = Colors.Green;
    OrientationLabel.Text = $"Orientation: {e.Reading}";
}

IOrientationSensor の読み取り値が Quaternion の形式で返されます。これは、2 つの 3D 座標系に基づくデバイスの向きを表現しています。

デバイス (通常は電話またはタブレット) には、次の軸を持つ 3D 座標系があります。

  • 正の X 軸は、縦長モードのディスプレイの右方向を指します。
  • 正の Y 軸は、縦長モードのデバイスの上方向を指します。
  • 正の Z 軸は、画面の外方向を指します。

地球の 3D 座標系には、次の軸があります。

  • 正の X 軸は地球の表面に対する接線であり、東を指します。
  • 正の Y 軸も地球の表面に対する接線であり、北を指します。
  • 正の Z 軸は地球の表面に対する垂直線であり、上方を指します。

Quaternion では、地球の座標系に対するデバイスの座標系の回転が表現されます。

Quaternion の値は、軸の周りの回転と密接に関係しています。 回転軸が正規化されたベクトル ($a_x, a_y, a_z$) で、回転角度が $\theta$ である場合、四元数の (X, Y, Z, W) 成分は次のようになります。

$(a_x \times \sin(\theta/2), a_y \times \sin(\theta/2), a_z \times \sin(\theta/2), \cos(\theta/2))$

これらは右手座標系です。したがって、右手の親指で回転軸の正の方向を指すと、その他の指の曲がる方向が正の角度の回転方向を示します。

次に例を示します。

  • デバイスが画面を上に向けてテーブルの上に平らに置かれ、デバイスの上部 (縦向きモード) が北を指している場合、2 つの座標系は揃っています。 Quaternion の値は単位四元数 (0, 0, 0, 1) を示します。 すべての回転は、この位置を基準として分析できます。

  • デバイスが画面を上に向けてテーブルの上に平らに置かれ、デバイスの上部 (縦向きモード) が西を指している場合、Quaternion の値は (0, 0, 0.707, 0.707) になります。 デバイスは、地球の Z 軸の周りを 90 度回転しています。

  • デバイスの上部 (縦向きモード) が空を指すようにデバイスが垂直に固定され、デバイスの背面が北を向いている場合、デバイスは X 軸の周りを 90 度回転しています。 Quaternion の値は (0.707, 0, 0, 0.707) です。

  • デバイスの左端がテーブルに付くようにデバイスが置かれ、上部が北を指している場合、デバイスは Y 軸の周りを -90 度 (または、負の Y 軸の周りを 90 度) 回転しています。 Quaternion の値は (0, -0.707, 0, 0.707) です。

プラットフォーム固有の情報 (向き)

向きセンサーに関連する、プラットフォーム固有の情報はありません。