m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

androidで加速度センサーの値を取得

値の位置による意味を理解しないといけない

ものすごい速度の値が変化したのはいいのですが、値のどれがどの方向とかを上手く理解しないと何もできない感がある
勉強してないからこのへんはよくわからない

実装

Activity
package jp.mshige1979.app.samapleappsensor2;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class MainActivity extends Activity implements SensorEventListener{

    private SensorManager manager;

    // 加速度センサー
    private Sensor accessSensor;

    // 表示用
    private TextView textview;
    private TextView textview2;
    private TextView textview3;

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

        //センサーマネージャを取得
        manager = (SensorManager) getSystemService(SENSOR_SERVICE);

        //センサマネージャから加速度センサーを指定
        accessSensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        textview = (TextView)findViewById(R.id.textview);
        textview2 = (TextView)findViewById(R.id.textview2);
        textview3 = (TextView)findViewById(R.id.textview3);

        textview.setText("加速度センサー1 = ");
        textview.setText("加速度センサー2 = ");
        textview.setText("加速度センサー3 = ");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // accuracy に変更があった時の処理
    }

    @Override
    public void onSensorChanged(SensorEvent event) {

        Sensor sensor = event.sensor;
        float[] values = event.values;
        long timestamp = event.timestamp;

        // 温度センサー
        if(sensor.getType() == Sensor.TYPE_ACCELEROMETER){
            // 温度
            Log.d("SENSOR_DATA", "TYPE_ACCELEROMETER1 = " + String.valueOf(values[0]));
            Log.d("SENSOR_DATA", "TYPE_ACCELEROMETER2 = " + String.valueOf(values[1]));
            Log.d("SENSOR_DATA", "TYPE_ACCELEROMETER3 = " + String.valueOf(values[2]));
            textview.setText("加速度センサー1 = " + String.valueOf(values[0]));
            textview2.setText("加速度センサー2 = " + String.valueOf(values[1]));
            textview3.setText("家族土センサー3 = " + String.valueOf(values[2]));
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        // リスナー設定
        manager.registerListener (this,
                accessSensor,
                SensorManager.SENSOR_DELAY_FASTEST);
    }

    @Override
    protected void onPause() {
        super.onPause();

        // リスナー解除
        manager.unregisterListener(this,accessSensor);
    }
}

結果

f:id:m_shige1979:20150628191242p:plain
※3つ目は見逃してwwwくださいm(_ _)m

所感

値の取得が速いのでゲームアプリなどを利用するのに使える感はある。
その前に加速度の値の意味を理解しないといけない
最初は参考書とかを見ながら見よう見まねでゲームを作ってから意味を理解してみるのもいいかも…