甩歌这个有趣的功能是基本每个音乐播放器都有的,那么今天我们来说一下如何实现重力甩歌功能。
在我的播放器里我实现了两种甩歌方式,一个是甩歌控制暂停播放,一个是甩歌控制切歌。并且这两个功能可以在设置里进行切换和关闭。
话不多说,上代码:
//重力感应代码
private static final int SHAKE_THRESHOLD = 4000;//这个控制精度,越小表示反应越灵敏
private long lastUpdate=0;
private double last_x=0;
private double last_y= 4.50;
private double last_z=9.50;
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
//处理精准度改变
}
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
long curTime = System.currentTimeMillis();
// 每100毫秒检测一次
if ((curTime - lastUpdate) > 100) {
long diffTime = (curTime - lastUpdate);
lastUpdate = curTime;
double x=event.values[SensorManager.DATA_X];
double y=event.values[SensorManager.DATA_Y];
double z=event.values[SensorManager.DATA_Z];
float speed = (float) (Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000);
if (speed > SHAKE_THRESHOLD) {
//检测到摇晃后执行的代码
if(isplay==1){
if(Shake_pause==20&&Shake_next!=20)
{
pause();
}
if(Shake_next==20&&Shake_pause!=20)
playNext();
isplay=0;
}else {
if(Shake_pause==20)
rePlay();
isplay=1;
}
if(Shake_pause==20&&Shake_next==20)
{
Toast.makeText(MusicPlayActivity.this, "不好意思,甩动切歌和甩动暂停只能开启一个!", Toast.LENGTH_SHORT).show();
}
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
注意:Shake_pause为20说明甩歌暂停功能开启,为10说明功能关闭。Shake_next同理。