传感器AssistantSensorListener
packagecom.qianfeng.assistant.modules.other.utils;importandroid.content.Context;importandroid.hardware.Sensor;importandroid.hardware.SensorEvent;importandroid.hardware.SensorEventListener;importandroid.hardware.SensorManager;/***CreatedbyAdministratoron16-3-29.*/publicclassAssistantSensorListenerimplementsSensorEventListener{privateSensorsensor;privateSensorManagermanager;privatefinallongthresholdTime=300;privatelonglastTime;privatelongtempTime;privatefinaldoublethresholdSpeed=100;privateIShakeListenerlistener;/***记录传感器上一次的空间位置*/privatefloatlastX,lastY,lastZ;publicAssistantSensorListener(Contextcontext){//获取传感器managermanager=(SensorManager)context.getSystemService(Context.SENSOR_SERVICE);if(manager!=null){//获取默认的加速度传感器sensor=manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);if(sensor!=null){//注册传感器manager.registerListener(this,sensor,Sensor.TYPE_ACCELEROMETER);}}}@OverridepublicvoidonSensorChanged(SensorEventevent){longcurrentTime=System.currentTimeMillis();tempTime=currentTime-lastTime;//控制刷新的频率if(tempTime<thresholdTime){return;}lastTime=currentTime;float[]values=event.values;floatx=values[0];floaty=values[1];floatz=values[2];LogUtils.d("onSensorChangedevent",x+","+y+","+z+";");//计算三个坐标轴上的相对位移floattempx=x-lastX;floattempy=y-lastY;floattempz=z-lastZ;doublespeed=Math.sqrt(tempx*tempx+tempy*tempy+tempz*tempz)*1000/tempTime;//重新记录位置lastX=x;lastY=y;lastZ=z;//如果速度达到100,即可认定手机正在摇动,用监听器回调出去if(speed>thresholdSpeed&&listener!=null){listener.onShake(speed);}LogUtils.e("speed"+speed);}/***设置摇一摇监听器**@paramlistener摇一摇监听器*/publicvoidsetShakeListener(IShakeListenerlistener){this.listener=listener;}/****注销系统服务*/publicvoidunRegisterManager(){if(manager!=null&&sensor!=null){manager.unregisterListener(this);}}@OverridepublicvoidonAccuracyChanged(Sensorsensor,intaccuracy){}/***摇一摇接口*/publicinterfaceIShakeListener{/***正在摇动*speed摇动的速度*/voidonShake(doublespeed);}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。