サンプルプログラム工場

AAKAKA Appで使われているプログラムのサンプルコードをそのまま公開!

サンプルプログラム工場 > android > 磁気センサーの値を取りだして表示するサンプル#tryMagneticField00
Google Play AAKAKAxSOFTへ

磁気センサーの値を取りだして表示するサンプル#tryMagneticField00

実行ファイル(APK)やサンプル(zip)をダウンロードする
tryMagneticField00の実行イメージ

磁気センサーの値を取りだして表示する。
変化がわかりやすく色を変えてはいるけど、なんか値が意味不明な感じになってるね。
これはいったいどういうことなのか…。

検索した事
 SensorManager.remapCoordinateSystem
 TYPE_MAGNETIC_FIELD

開発環境
 Eclipse IDE バージョン: 3.7 Indigo Service Release 2
 ターゲットプラットフォーム: 2.2
 API レベル: 8

package sample.example.trymagneticfield00;

import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.support.v4.app.NavUtils;

public class TryMagneticField00Activity extends Activity implements SensorEventListener, Runnable {

	// エディットテキストのコントロール
	private EditText	mEditTextX;
	private EditText	mEditTextY;
	private EditText	mEditTextZ;
	
	// 磁気センサーの値
	private float mMagneticX;
	private float mMagneticY;
	private float mMagneticZ;
	
	private SensorManager	mSensorManager;	// センサーマネージャー
	private Sensor mMagneticField;	// 磁気センサー
	private Handler mHander = new Handler();	// 定期的に表示を切り替える
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_try_magnetic_field00);
        
        // センサーマネージャーを取り出す
        this.mSensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE);
        
        // 磁気センサーを取り出す
        this.mMagneticField = this.mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

        // EditTextを取り出す
        this.mEditTextX = (EditText)this.findViewById(R.id.editText_X);
        this.mEditTextY = (EditText)this.findViewById(R.id.editText_Y);
        this.mEditTextZ = (EditText)this.findViewById(R.id.editText_Z);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_try_magnetic_field00, menu);
        return true;
    }

    // ////////////////////////////////////////////////////////////
    // アプリケーション再開時
	@Override
	protected void onResume() {
		
		// センサーリスナーを登録する
		this.mSensorManager.registerListener(
				this, this.mMagneticField, SensorManager.SENSOR_DELAY_NORMAL);
		// 表示を切り替えるためのハンドラー
		this.mHander.postDelayed(this, 50);
		
		super.onResume();
	}

	// ////////////////////////////////////////////////////////////
	// Activityがバックグラウンドに来たときかな?
	@Override
	protected void onPause() {
		
		// リスナーを外す
		this.mSensorManager.unregisterListener(this);
		
		// 表示を切り替えるためのハンドラー
		this.mHander.removeCallbacks(this);
		
		super.onPause();
	}
    
	// ////////////////////////////////////////////////////////////
	// 精度が変更された
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO 自動生成されたメソッド・スタブ
		
	}

	
	// ////////////////////////////////////////////////////////////
	// センサーの値に変更があった
	public void onSensorChanged(SensorEvent event) {
		
		// 磁気センサー
		if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {

			// 各軸方向の値を取り出す
			this.mMagneticX = event.values[0];
			this.mMagneticY = event.values[1];
			this.mMagneticZ = event.values[2];
		}
	}

	// ////////////////////////////////////////////////////////////
	// センサーの値から色を作る(0→10→0→-10→0みたいな値の変化をする)
	private int sensorValueToColor(float value) {
		value = Math.abs(value);
		return (int)((Math.abs(value) / 36.0f) * 200) + 55;
	}

	
	// ////////////////////////////////////////////////////////////
	// 定期的に実行
	public void run() {
		// EditTextに表示する
		this.mEditTextX.setText(String.format("%1.8f", this.mMagneticX));
		this.mEditTextX.setBackgroundColor(Color.rgb(this.sensorValueToColor(this.mMagneticX), 0, 0));
		this.mEditTextY.setText(String.format("%1.8f", this.mMagneticY));
		this.mEditTextY.setBackgroundColor(Color.rgb(0, this.sensorValueToColor(this.mMagneticY), 0));
		this.mEditTextZ.setText(String.format("%1.8f", this.mMagneticZ));
		this.mEditTextZ.setBackgroundColor(Color.rgb(0, 0, this.sensorValueToColor(this.mMagneticZ)));
		
		this.mHander.postDelayed(this, 50);
	}
}

サンプルプロジェクトをダウンロード APKファイルをダウンロード

, , , ,

Androidでコンパス/方位磁針を作るサンプル#tryCompass00 GPS/ネットワークから座標を取得するサンプル#tryGPS00

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>