サンプルプログラム工場

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

サンプルプログラム工場 > android > 加速度センサーの値を取得するサンプル#trySensor00
Google Play AAKAKAxSOFTへ

加速度センサーの値を取得するサンプル#trySensor00

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

加速度センサーを使って各方向の加速度を取り出す(X,Y,Z)
せっかくなので取り出した値に色をつけてみちゃったり。
振動センサー的なモノだと勘違いしていたけど端末の傾きを表現するモノらしい。
端末が水平においてあるときはX=0だけど左に傾けると+になっていって真下を向くとまた0になる。
これで瞬間的な衝撃(例えば画面をとんとん叩いたときの振動)を取り出すのはちょっと難しそう。

検索した事
 TYPE_ACCELEROMETER Android 2.1
 Android onSensorChanged TYPE_ACCELEROMETER
 
開発環境
 Eclipse IDE バージョン: 3.7 Indigo Service Release 2
 ターゲットプラットフォーム: 2.1
 API レベル: 7

package trial.sample.trysensor00;

import android.app.Activity;
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.widget.EditText;

public class TrySensor00Activity extends Activity implements SensorEventListener, Runnable{
	
	
	private SensorManager	mSensorManager;	// センサーマネージャー
	private Sensor mAccelerometer;	// 加速度センサー
	private Handler mHander = new Handler();	// 定期的に表示を切り替える
	
	
	// エディットテキストのコントロール
	private EditText	mEditTextX;
	private EditText	mEditTextY;
	private EditText	mEditTextZ;
	
	// 加速度センサーの値
	private float mAcceX;
	private float mAcceY;
	private float mAcceZ;
	
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // センサーマネージャーを取り出す
        this.mSensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE);
        
        // 加速度センサーを取り出す
        this.mAccelerometer = this.mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        // 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
	protected void onResume() {
		
		// センサーリスナーを登録する
		this.mSensorManager.registerListener(
				this, this.mAccelerometer, 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();
	}

	
	// ////////////////////////////////////////////////////////////
	// アプリが破棄された
	@Override
	protected void onDestroy() {
		// TODO 自動生成されたメソッド・スタブ
		super.onDestroy();
	}

	// ////////////////////////////////////////////////////////////
	// 精度が変更された
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO 自動生成されたメソッド・スタブ
		
	}

	
	// ////////////////////////////////////////////////////////////
	// センサーの値に変更があった
	public void onSensorChanged(SensorEvent event) {
		
		// 加速度センサだった時
		if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

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

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

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

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

, , , , , , , ,

一定時間で勝手に消えるダイアログサンプル#tryCustomDialog01 タッチパネルを触った強さを取るサンプル#tryTouch00

2 Responses to “加速度センサーの値を取得するサンプル#trySensor00”

コメントを残す

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


*

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