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); } }
摇一摇demo
最新推荐文章于 2018-09-14 17:04:00 发布