微信摇一摇功能的实现

最近学习了一些微信常见的部分功能,然后觉得摇一摇这个相对来说比较独特的功能来说,其中的编程思想还是挺巧妙的,我们需要的一方面设置好用户权限,一方面要配置好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布局文件的话,就更好了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值