摇一摇
1 package com.example.administrator.mystudent.ShakeShake; 2 3 import android.hardware.Sensor; 4 import android.hardware.SensorEvent; 5 import android.hardware.SensorEventListener; 6 import android.hardware.SensorManager; 7 import android.media.AudioManager; 8 import android.media.SoundPool; 9 import android.os.Handler; 10 import android.os.Message; 11 import android.os.Vibrator; 12 import android.support.v7.app.AppCompatActivity; 13 import android.os.Bundle; 14 import android.view.animation.Animation; 15 import android.view.animation.RotateAnimation; 16 import android.widget.ImageView; 17 import android.widget.Toast; 18 19 import com.example.administrator.mystudent.R; 20 21 22 23 public class ShakeActivity extends AppCompatActivity { 24 private static final String TAG = "摇一摇"; 25 private static final int SENSOR_SHAKE = 10; 26 private ImageView mImageShake; 27 private SensorManager mSensorManager; 28 private Vibrator mVibrator; 29 30 @Override 31 protected void onCreate(Bundle savedInstanceState) { 32 super.onCreate(savedInstanceState); 33 setContentView(R.layout.activity_shake); 34 init(); 35 } 36 37 private void init() { 38 mImageShake= (ImageView) findViewById(R.id.iv_shake); 39 mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE); 40 mVibrator= (Vibrator) getSystemService(VIBRATOR_SERVICE); 41 } 42 43 /** 44 * 但显示当前界面的时候 45 */ 46 @Override 47 protected void onResume() { 48 super.onResume(); 49 if(mSensorManager!=null){ 50 // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率 51 mSensorManager.registerListener(mSensorEventListener,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 52 } 53 } 54 55 @Override 56 protected void onStop() { 57 super.onStop(); 58 if (mSensorManager != null) { 59 // 取消监听器 60 mSensorManager.unregisterListener(mSensorEventListener); 61 } 62 } 63 64 //传感器监听类 65 private SensorEventListener mSensorEventListener=new SensorEventListener() { 66 67 @Override 68 public void onSensorChanged(SensorEvent event) { 69 // 传感器信息改变时执行该方法 70 float[] values = event.values; 71 float x = values[0]; // x轴方向的重力加速度,向右为正 72 float y = values[1]; // y轴方向的重力加速度,向前为正 73 float z = values[2]; // z轴方向的重力加速度,向上为正 74 // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。 75 int medumValue = 18;// 如果不敏感请自行调低该数值,低于10的话就不行了,因为z轴上的加速度本身就已经达到10了 76 if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) { 77 mVibrator.vibrate(200); 78 Message msg = new Message(); 79 msg.what = SENSOR_SHAKE; 80 handler.sendMessage(msg); 81 } 82 } 83 84 @Override 85 public void onAccuracyChanged(Sensor sensor, int accuracy) { 86 //当传感器的精度变化时会调用 87 } 88 }; 89 90 Handler handler=new Handler(){ 91 @Override 92 public void handleMessage(Message msg) { 93 super.handleMessage(msg); 94 if(msg.what==SENSOR_SHAKE){ 95 setAimation(); 96 setVoice(); 97 Toast.makeText(getApplicationContext(),"恭喜你摇到了iphone7",Toast.LENGTH_SHORT).show(); 98 } 99 } 100 }; 101 102 private void setVoice() { 103 104 SoundPool sp= new SoundPool(10, AudioManager.STREAM_SYSTEM, 5); 105 sp.load(this,R.raw.clock, 1); //第二个参数是音乐资源文件 106 sp.play(1, 1, 1, 0, 0, 1);//播放声音 107 } 108 109 private void setAimation() { 110 RotateAnimation ra=new RotateAnimation(0.0f, 60.0f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f); 111 ra.setDuration(200); 112 mImageShake.startAnimation(ra); 113 } 114 115 }