Android传感器的使用

如何初始化

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;
    }    
}

结果测试
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mayifan_blog/article/details/86561165