2013/05/08

Android 根據重力取得方向

最近又開始回來嘗試用Sensor的應用,那有想到一些方法可以取得到手機方向
這個實做只針對垂直的手機,當手機90度選轉等等的就要麻煩各位自行嘗試了

透過重力取得好處在於,世界每一樣物品都會有重量,不論是空氣、水或是蘋果等等的
所以我們可以去取得到他目前的重力去判斷手機有可能的方向


package com.cyfang.sensor;

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.view.View;

public class MainActivity extends Activity {
    private SensorManager sensorManager;
    private Sensor sensor;

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

    }

    @Override
    protected void onPause() {
        sensorManager.unregisterListener(sensorEventListener);
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(sensorEventListener, sensor,
                SensorManager.SENSOR_DELAY_NORMAL);
    }

    // 初始化
    private void init() {
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
    }





    private final SensorEventListener sensorEventListener = new SensorEventListener() {

        @Override
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_GRAVITY) {
                float[] values = event.values;

                if (values[0] > 4) { // 左邊
    
                } else if (values[0] < -4) { // 右邊
    
                } else if (values[1] > 5) { // 上


                } else if (values[1] < -4) { // 下

                }
            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    };
}