您的位置:首页 > 移动开发 > 微信开发

android摇一摇功能音效与振动附加微信音效大全下载

2016-02-29 20:31 585 查看
检测手机摇动通过实现SensorEventListener接口实现

振动通过Vibrator实现

音效通过SoundPool实现

微信各种音效文件下载:微信音效大全

public class MainShakeActivity extends BaseActivity implements SensorEventListener {
private static final String TAG="MainShakeActivity";
...
//定义sensor管理器
private SensorManager mSensorManager;
//震动
private Vibrator mVibrator;
/**
* 音效
*/
SoundPool mSoundPool;
/**
* 音频id
*/
int mSoundId;
/*存储服务器返回的response*/
MainShakeBean mBean;

@Override
protected void initData() {
super.initData();
//获取传感器管理服务
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
//震动
mVibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);

/*摇一摇音效*/
/*public SoundPool(int maxStream, int StreamType, int srcuality)
maxStream —— 同时播放的流的最大数量,即同时能播放音乐的数量上限,具体理解讲看完后文
streamType —— 流的类型,一般都是使用AudioManager.STREAM_MUSIC,表示可以重复播放
srcQuality —— 采样率转化质量,但是现在该功能还不生效,可能以后的Android版本会起作用吧,建意用0*/
mSoundPool= new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
/*int load(Context context, int resId, int priority)
参数Context context:略
参数resId:代表资源文件中的音乐文件,如/res/raw/dingdong.ogg文件
参数int priority:API中指出,该参数目前没有效果,建议设置为1。*/
mSoundId=mSoundPool.load(this,R.raw.shake, 1); //第二个参数是音乐资源文件
}

@Override
protected void onResume() {
super.onResume();
//加速度传感器
//还有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等,
//根据不同应用,需要的反应速率不同,具体根据实际情况设定
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onPause() {
super.onPause();
/*离开界面解除振动检测*/
mSensorManager.unregisterListener(this);
/*离开界面取消网络请求*/
client.getRequestQueue().cancelAll(TAG);
/*离开界面释放音频资源*/
mSoundPool.unload(mSoundId);
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//当传感器精度改变时回调该方法,Do nothing.
}

@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
int sensorType = event.sensor.getType();
//values[0]:X轴,values[1]:Y轴,values[2]:Z轴
float[] values = event.values;
if (sensorType == Sensor.TYPE_ACCELEROMETER) {
/*
*经过测试加速度设置为18的时候摇晃强度比较合理
*/
final int ACCELEROMETER=18;
if ((Math.abs(values[0]) > ACCELEROMETER || Math.abs(values[1]) > ACCELEROMETER || Math.abs(values[2]) > ACCELEROMETER)) {
ToastUtil.showShortToast(MainShakeActivity.this, "正在努力加载");
//摇动手机后,再伴随震动提示~~
mVibrator.vibrate(500);
/*播放摇一摇音效*/
mSoundPool.play(mSoundId, 1, 1, 1, 0, 1);//播放声音
/*网络请求数据*/
/*final int play(int soundID, float leftVolume, float rightVolume, int priority, int loop,floatrate)
播放指定音频的音效,并返回一个streamID,如果失败返回0;
参数soundId: 即SoundPool对象load函数的返回值
参数priority:音频的优先级,值越大优先级高,影响当同时播放数量超出了最大支持数时SoundPool对该流的处理;
SoundPool类的构造函数SoundPool(int maxStream, int StreamType, int srcuality)中参数maxStream指定了
SoundPool对象能同时播音乐文件的最大数量maxStream,所以当使用SoundPool对象循环调用play播放音乐,
如果调用数量超过了maxStream,则就会根据paly中的priority设置的权限来确定哪些被播放,哪些不会被播放。
参数loop: 循环播放的次数,0为值播放一次,-1为无限循环,其他值为播放loop+1次(例如,3为一共播放次)。
参数rate:播放的速率,范围0.5-2.0(0.5为一半速率,1.0为正常速率,2.0为两倍速率)
参数leftVolume:左声道音量, 值在0.0f到1.0之前
参数rightVolume:左声道音量, 值在0.0f到1.0之前*/
shake();
}
}
}

public void shake() {
...
}

}

当然记得振动需要声明权限:

<uses-permission android:name="android.permission.VIBRATE" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: