摇一摇demo

来源:互联网 发布:unity3d 粒子系统闪电 编辑:程序博客网 时间:2024/06/08 18:10
package com.example.wuhan.workapplication;import android.app.Activity;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Handler;import android.os.Message;import android.os.Vibrator;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Toast;public class MainActivity extends Activity {    private SensorManager sensorManager;    private Vibrator vibrator;    private int sum=0;    private static final int SENSOR_SHAKE = 10;    private long LastTime;    private float lastX,lastY,lastZ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);        vibrator= (Vibrator) getSystemService(VIBRATOR_SERVICE);    }    @Override    protected void onResume() {        super.onResume();        if(sensorManager != null){            sensorManager.registerListener(listener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);            // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率        }    }    private SensorEventListener listener=new SensorEventListener() {        @Override        public void onSensorChanged(SensorEvent event) {            long currentUpdateTime=System.currentTimeMillis();            long TimeJiange=currentUpdateTime-LastTime;            System.out.println("TimeJiange:"+TimeJiange);            if(TimeJiange < 100){                return;            }            LastTime=currentUpdateTime;            // 传感器信息改变时执行该方法             float[] values= event.values;            float x=values[0];            float y=values[1];            float z=values[2];            float deltaX=x-lastX;            float deltaY=y-lastY;            float deltaZ=z-lastZ;            lastX=x;            lastY=y;            lastZ=z;            float delta = (float) (Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / TimeJiange * 10000);            System.out.println("delta:"+delta);            if(delta > 1000){                vibrator.vibrate(200);                sum++;                Message msg=new Message();                msg.what=SENSOR_SHAKE;                handler.sendMessage(msg);            }            // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。            /*int medumValue =15;// 如果不敏感请自行调低该数值,低于10的话就不行了,因为z轴上的加速度本身就已经达到10            if(Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue){                vibrator.vibrate(200);                sum++;                Message msg=new Message();                msg.what=SENSOR_SHAKE;                handler.sendMessage(msg);            }*/        }        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {        }    };    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what){                case SENSOR_SHAKE:                    if(sum==5){                        sensorManager.unregisterListener(listener);                    }                    Toast.makeText(MainActivity.this, "OK"+sum, Toast.LENGTH_SHORT).show();            }        }    };    @Override    protected void onDestroy() {        super.onDestroy();        sensorManager.unregisterListener(listener);    }}
0 0
原创粉丝点击