在Android中,所有傳感器都要通過SensorMannager來訪問,
然後調用getSystemService(SENSOR_SERVICE)方法得到手機的傳感器管理對象,
onSensorChanged(SensorEvent se)在傳感器值更改時調用,
使用傳感器必須調用registerListener(SensorEventListener listener, Sensor sensor, int rate)方法註冊,
感應器有3個方向float類型的值,x,y,z,取值范圍在-10到10之間,
手機屏幕向上(z軸朝天)水平放置的時侯,x=0,y=0,z=10
手機屏幕向下(z軸朝地)水平放置的時侯,x=0,y=0,z=-10
手機屏幕向左(x軸朝天)的時候,x=10,y=0,z=0
手機豎直(y軸朝天)向上的時候,x=0,y=10,z=0
代碼:
PS:在XML文件中有個TextView,用來顯示重力感應器的值,
[java] public class TestActivity extends Activity {
TextView textView;
float x,y,z;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView=(TextView) findViewById(R.id.textView);
//獲得重力感應硬件控制器
SensorManager sm=(SensorManager) this.getSystemService(SENSOR_SERVICE);
Sensor sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//添加重力感應偵聽,並實現其方法,
SensorEventListener sel=new SensorEventListener(){
public void onSensorChanged(SensorEvent se) {
x=se.values[SensorManager.DATA_X];
y=se.values[SensorManager.DATA_Y];
z=se.values[SensorManager.DATA_Z];
textView.setText("x="+(int)x+"y="+(int)y+"z="+(int)z);
}
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
};
//註冊Listener,SENSOR_DELAY_GAME為檢測的精確度,
sm.registerListener(sel, sensor,SensorManager.SENSOR_DELAY_GAME);
}
public class TestActivity extends Activity {
TextView textView;
float x,y,z;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView=(TextView) findViewById(R.id.textView);
//獲得重力感應硬件控制器
SensorManager sm=(SensorManager) this.getSystemService(SENSOR_SERVICE);
Sensor sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//添加重力感應偵聽,並實現其方法,
SensorEventListener sel=new SensorEventListener(){
public void onSensorChanged(SensorEvent se) {
x=se.values[SensorManager.DATA_X];
y=se.values[SensorManager.DATA_Y];
z=se.values[SensorManager.DATA_Z];
textView.setText("x="+(int)x+"y="+(int)y+"z="+(int)z);
}
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
};
//註冊Listener,SENSOR_DELAY_GAME為檢測的精確度,
sm.registerListener(sel, sensor,SensorManager.SENSOR_DELAY_GAME);
}
當然,也可以用SensorEventListener接口來實現,
感應器在模擬器中是不能測試的,下面是真機測試效果,
摘自 柒尐狐的專欄