最近学习了一些微信常见的部分功能,然后觉得摇一摇这个相对来说比较独特的功能来说,其中的编程思想还是挺巧妙的,我们需要的一方面设置好用户权限,一方面要配置好JAVA文件,实例如下:
包名还是老样子,你想怎么设置路径就怎么设置,根据自己的Android工程来决定的。
public class ShapeListenter implements SensorEventListener {
//上下文环境
private Context con;
//传感器对象
private Sensor sensor;
//传感器管理者
private SensorManager sensorManager;
//坐标
private float lastx;
private float lasty;
private float lastz;
//振动器
private Vibrator vivrator;
//时间阀值
private int UPDATE_INTERVAL_TIME=70;
//速度阀值
private int SPEED_SHRESHOLD=3000;
//最后时间
private long lastDate;
//构造方法
public ShapeListenter(Context con) {
super();
this.con = con;
}
/**
* 开始
*/
public void start(){
//实例化对象
sensorManager=(SensorManager) con.getSystemService(Context.SENSOR_SERVICE);
sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
vivrator=(Vibrator) con.getSystemService(Service.VIBRATOR_SERVICE);
//注册
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
}
/**
* 结束
*/
public void stop(){
//停止注册
sensorManager.unregisterListener(this);
}
/**
* 传感器变化
*/
@Override
public void onSensorChanged(SensorEvent event) {
//获取当前时间
long currentDate=System.currentTimeMillis();
//时间变化
long timeDate=currentDate-lastDate;
//如果时间间隔小于时间阀值
if(timeDate<UPDATE_INTERVAL_TIME){
return ;
}
//当前时间赋值给最后时间
lastDate=currentDate;
//获得当前的坐标x,y,z
float x=event.values[0];
float y=event.values[1];
float z=event.values[2];
//获得x,y,z的变化值
float deltaX=x-lastx;
float deltaY=y-lasty;
float deltaZ=z-lastz;
//将现在的坐标变为last坐标
lastx=x;
lasty=y;
lastz=z;
//达到速度阀值,发出振动
double speed=Math.sqrt(deltaX*deltaX+deltaY*deltaY+deltaZ*deltaZ)/timeDate*10000;
if(speed>SPEED_SHRESHOLD){
vivrator.vibrate(500);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
}
//Activity 类
public class MainActivity extends ActionBarActivity {
private ShapeListenter shape;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
shape=new ShapeListenter(this);
shape.start();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
shape.start();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
shape.stop();
}
}
然后再配上XML布局文件的话,就更好了。