摇一摇功能
1、获取传感器管理类
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2、继承SensorEventListener接口,重写传感器监听方法
@Override
public void onSensorChanged(SensorEvent event) {
/**
* 1、获得传感器类型(如果为加速度传感器,则为摇一摇)
* 2、判断其加速度大小
*/
int type = event.sensor.getType();
if (type != Sensor.TYPE_ACCELEROMETER) {
return;
}
long currentTime = System.currentTimeMillis();
long diffTime = currentTime - mLastUpdateTime;
//UPDATE_INTERVAL=100 检测的时间间隔
if (diffTime < UPDATE_INTERVAL) {
return;
}
mLastUpdateTime = currentTime;
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
//mLastX, mLastY, mLastZ 上一次检测时,加速度在x、y、z方向上的分量,用于和当前加速度比较求差。
float deltaX = x - mLastX;
float deltaY = y - mLastY;
float deltaZ = z - mLastZ;
mLastX = x;
mLastY = y;
mLastZ = z;
float delta = (float) (Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / diffTime * 10000);
// 当加速度的差值大于指定的阈值,认为这是一个摇晃
if (delta > 500) {
Message message = Message.obtain();
message.what = 1;
mHandler.sendMessage(message);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
3、注册监听器
if (sensorManager != null) {
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (sensor != null) {
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
}
// sensorManager.registerListener(listener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
4、取消监听器
sensorManager.unregisterListener(listener);
添加摇一摇声效
1、初始化声音,添加声音文件
soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);//5.0以下使用
soundId = soundPool.load(context, R.raw.shake_sound, 1);
soundPool.play(soundId,
1f, //左声道【0~1】
1f, //右声道【0~1】
1,//播放优先级 【0表示优先级最低】
0,//循环次数 【0为1次,-1为无限次】
1);//播放速度 0为正常速度【0~2】
添加摇一摇震动
1、初始化类
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(300);//300milliseconds
<!--摇一摇需要的权限-->
<uses-permission android:name="android.hardware.sensor.accelerometer" />
<!--震动所需要的权限-->
<uses-permission android:name="android.permission.VIBRATE" />