[Android 開発] 端末の傾きと方位角を求める (非推奨)

Posted by
ぴろり
Posted at
2015/02/07 16:23
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
開発メモ カテゴリ
カバーイメージ

 端末の傾きと東西南北を検出するコードの覚書き。ただし、ここで紹介する方法は、Android 2.2 (API Level 8) から非推奨(deprecated)とされているので、あくまで参考程度に。

このエントリーをはてなブックマークに追加  

スクラップ帳 » Android アプリ開発 Tips ~ センサ入力

 Android アプリを開発する際の小技まとめ。GPS、コンパスなどの各種センサ デバイスからのデータの取得方法などの覚書きを網羅して、必要な機能をコピー&ペーストで再利用できるようにします。

  1. GPS を使う 2015/02/05
  2. GPS 衛星の情報を取得する 2015/02/06
  3. GPS モジュールが出力する NMEA メッセージを取得する 2015/02/06
  4. 端末の傾きと方位角を求める (非推奨) 2015/02/07 今ココ
  5. 端末の傾きと方位角を求める 2015/02/07

概要

  1. SensorManager を取得する
  2. SensorManager に、TYPE_ORIENTATION センサのリスナ SensorEventListener を登録する
  3. センサの状態が変化したら、SensorEventListeneronSensorChanged メンバ関数がコールバックされる
  4. 動作を止めるには SensorManager から SensorEventListener を外す


Fig.1 スクリーンショット

ソースコード

package com.example.helloworld;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.content.Context;
import android.hardware.SensorManager;
import android.hardware.SensorEventListener;
import android.hardware.SensorEvent;
import android.hardware.Sensor;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity
{
    private SensorManager mSensorManager = null;
    private SensorEventListener mSensorEventListener = null;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSensorManager = (SensorManager) getSystemService( Context.SENSOR_SERVICE );

        mSensorEventListener = new SensorEventListener()
        {
            public void onSensorChanged (SensorEvent event) {
                if( event.sensor.getType() == Sensor.TYPE_ORIENTATION ) {
                    String buf =
                            "---------- Orientation --------\n" +
                            String.format( "方位角\n\t%f\n", event.values[0] ) +
                            String.format( "前後の傾斜\n\t%f\n", event.values[1] ) +
                            String.format( "左右の傾斜\n\t%f\n", event.values[2] );
                    TextView t = (TextView) findViewById( R.id.textView1 );
                    t.setText( buf );
                }
            }
            public void onAccuracyChanged (Sensor sensor, int accuracy) {}
        };
    }

    protected void onStart () { // ⇔ onStop
        super.onStart();

        mSensorManager.registerListener(
                mSensorEventListener,
                mSensorManager.getDefaultSensor( Sensor.TYPE_ORIENTATION ),
                SensorManager.SENSOR_DELAY_UI );
    }

    protected void onStop() { // ⇔ onStart
        super.onStop();

        mSensorManager.unregisterListener( mSensorEventListener );
    }
}

解説

22 行目
 SensorManager を取得します(概要の手順.1)
24~38 行目
 SensorEventListener のインスタンスを生成しています。まだ LocationManager に登録されていないので情報は取得できません。
26 行目
 センサの値が変化した際に呼ばれるコールバックです。ここで、取得したセンサ値を整形して、アクティビティに配置した TextView に確認できるように出力しています(概要の手順.3)。
44~48 行目
 SensorManagerSensorEventListener を登録して、センサ値の取得を始めます(概要の手順.2)。
54 行目
 センサ値の取得を停止します(概要の手順.4)。

参考リンク

このエントリーをはてなブックマークに追加  


この記事を読んだ人はこんな記事も読んでいます記事リコメンデーションについて

カバー画像:[Android 開発] 端末の傾きと方位角を求める

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。