透過SensorEventListener可以把不同類型的感測實作出來,詳細類型可參考官網,這邊就先以方向感測為例

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


public class test extends Activity {
	
	SensorManager sm = null;
	
	TextView xViewA = null;
	TextView yViewA = null;
	TextView zViewA = null;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        xViewA = (TextView) findViewById(R.id.xbox);
        yViewA = (TextView) findViewById(R.id.ybox);
        zViewA = (TextView) findViewById(R.id.zbox);
        
        //取得sensor service
        sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        //註冊Listener(SensorEventListener,sensor的感測類型,適合的sensor採樣變化率)
        sm.registerListener(acc_listener, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_NORMAL);       
        
    
    }

    private SensorEventListener acc_listener = new SensorEventListener() {
    	//當sensor的準確性改變時會執行
		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			Log.d("Sensor_test","onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
		}
		
		//sensor座標變動時執行
		@Override
		public void onSensorChanged(SensorEvent event) {
			xViewA.setText("ORIENTATION_X: " + event.values[1]);
			yViewA.setText("ORIENTATION_Y: " + event.values[2]);
			zViewA.setText("ORIENTATION_Z: " + event.values[0]);
			/*
			 * value[0]:Z軸,Sensor方位,北:0、東:90、南:180、西:270
			 * value[1]:X軸,Sensor傾斜度(抬起手機頂部,X軸的值會變動)
			 * value[2]:Y軸,Sensor滾動角度(側邊翻轉)
			 */
		}
	};
}
Categories: Android