1.在onStart() 方法中获取传感器的SensorManager
@Override
protected void onStart() {
super.onStart();
//获取 SensorManager 负责管理传感器
mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));
if (mSensorManager != null) {
//获取加速度传感器
mAccelerometerSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (mAccelerometerSensor != null) {
mSensorManager.registerListener(this, mAccelerometerSensor, SensorManager.SENSOR_DELAY_UI);
}
}
}
2.紧接着我们就要在Stop中注销传感器
@Override
protected void onStop() {
// 务必要在pause中注销 mSensorManager
// 否则会造成界面退出后摇一摇依旧生效的bug
if (mSensorManager != null) {
mSensorManager.unregisterListener(this);
}
super.onStop();
}
3.在step1中的注册监听事件方法中, 我们传入了当前Activity对象, 故让其实现回调接口, 得到以下方法
@Override
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if (type == Sensor.TYPE_ACCELEROMETER) {
//获取三个方向值
float[] values = event.values;
float x = values[0];
float y = values[1];
float z = values[2];
if ((Math.abs(x) > 17 || Math.abs(y) > 17 || Math
.abs(z) > 17) && !isShake) {
// TODO: 2016/10/19 实现摇动逻辑, 摇动后进行震动和声音
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
4.振动和声音
震动权限
MediaPlayer player = MediaPlayer.create(this, R.raw.weichat_audio);
player.start();
//获取Vibrator震动服务
mVibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
//方式1
mVibrator.vibrate(1000);//振动一秒
//方式2
//这里使用的是一个长整型数组,数组的a[0]表示静止的时间,a[1]代表的是震动的时间,然后数组的a[2]表示静止的时间,a[3]代表的是震动的时间……依次类推下去,然后这里的代码有一点小小的改变:
long[] patter = {1000, 1000, 2000, 50};
mVibrator.vibrate(patter, 0);