如何初始化
1、获取传感器管理器对象:
SensorManager sensorMgr=(SensorManager)this.getSystemService(SENSOR_SERVICE);
2、获取传感器对象(比如重力传感器):
Sensor sensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
3、创建监听器并实现传感器的监听方法:
SensorEventListener lsn=new SensorEventListener() {
//参数改变时触发
public void onSensorChanged(SensorEvent event) {
float x=event.values[SensorManager.DATA_X];//得到x,y,z数值
float y=event.values[SensorManager.DATA_Y];
float z=event.values[SensorManager.DATA_Z];
Toast.makeText(mainActivity," x:"+x+" y:"+y+" z:"+z ,Toast.LENGTH_LONG).show();//显示数据
}
//精度改变时触发
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
传感器的数据都保存在value数组中,通过SensorEvent的对象可以访问。监听方法有两个,一个是在参数改变时触发,就比如说重力传感器的坐标位置改变时会触发;另一个方法在精度改变后会触发。
4、注册传感器监听:
sensorMgr.registerListener(lsn, sensor,sensorMgr.SENSOR_DELAY_UI);
三个入口参数,第一个是监听器对象,第二个是传感器对象,它们都已经被获取,最后一个选项是设置速度:
①SENSOR_DELAY_FASTEST:速度最快,很灵敏
②SENSOR_DELAY_GAME:玩游戏的时候用这个
③SENSOR_DELAY_NORMAL:比较慢
④SENSOR_DELAY_UI:最慢的
完整代码及结果测试
完整代码:
public class MainActivity extends Activity {
private SensorManager sensorMgr;
private Sensor sensor;
private int lx;//保存上一次的坐标
private int ly;
private int lz;
private long time;
private MainActivity mainActivity=this;
private void initSensor(){
sensorMgr=(SensorManager)this.getSystemService(SENSOR_SERVICE);//获取传感器管理器的实例
sensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获取传感器对象实例(重力传感器)
//传感器监听器实例
SensorEventListener lsn=new SensorEventListener() {
//参数改变时触发
public void onSensorChanged(SensorEvent event) {
float x=event.values[SensorManager.DATA_X];//得到x,y,z数值
float y=event.values[SensorManager.DATA_Y];
float z=event.values[SensorManager.DATA_Z];
Toast.makeText(mainActivity," x:"+x+" y:"+y+" z:"+z ,Toast.LENGTH_LONG).show();//显示数据
}
//精度改变时触发
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
//注册传感器,设置速度
sensorMgr.registerListener(lsn, sensor,sensorMgr.SENSOR_DELAY_UI);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initSensor();//初始化传感器
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
结果测试: