1.在onStart() 方法中獲取傳感器的SensorManager
@Override
protected void onStart() {
super.onStart();
//獲取 SensorManager 負(fù)責(zé)管理傳感器
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() {
// 務(wù)必要在pause中注銷 mSensorManager
// 否則會造成界面退出后搖一搖依舊生效的bug
if (mSensorManager != null) {
mSensorManager.unregisterListener(this);
}
super.onStop();
}
3.在step1中的注冊監(jiān)聽事件方法中, 我們傳入了當(dāng)前Activity對象, 故讓其實現(xiàn)回調(diào)接口, 得到以下方法
@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 實現(xiàn)搖動邏輯, 搖動后進(jìn)行震動和聲音
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
4.振動和聲音
震動權(quán)限
<uses-permission android:name="android.permission.VIBRATE"/>
MediaPlayer player = MediaPlayer.create(this, R.raw.weichat_audio);
player.start();
//獲取Vibrator震動服務(wù)
mVibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
//方式1
mVibrator.vibrate(1000);//振動一秒
//方式2
//這里使用的是一個長整型數(shù)組屋灌,數(shù)組的a[0]表示靜止的時間淹真,a[1]代表的是震動的時間,然后數(shù)組的a[2]表示靜止的時間者祖,a[3]代表的是震動的時間……依次類推下去霹抛,然后這里的代碼有一點小小的改變:
long[] patter = {1000, 1000, 2000, 50};
mVibrator.vibrate(patter, 0);