android:为你的app设置音效

最近在项目中碰到需要设置音效开关的需求。

关于音效开发的问题,都是建立在手机系统设置中,没有静音,且打开了选择操作音的前提下。

1.系统自带的点击声音(通过设置View.playSoundEffect ()实现

看源码请参考http://blog.csdn.net/jdsjlzx/article/details/17382455

在项目所以的Activity的抽象基类BaseActivity中复写findViewById方法,通过配置文件记录音效开关

         /**
	 * 重写findViewById()方法,设置控件是否有按键声音
	 * */
	@Override
	public View findViewById(int id) {
		// TODO Auto-generated method stub
		View v = super.findViewById(id);
		if (v != null) {
			if (mAppConfig.soundOn()) {
				v.setSoundEffectsEnabled(true);
			} else {
				v.setSoundEffectsEnabled(false);
			}
		}
		return v;
	}

playSoundEffect方法对包括TextView,Button,GridView的item点击,ListView等等控件在内都是适用的,这个可以根据View的源码看到,但是我在项目中碰到的例如RadioGroup,就只能通过以下代码实现点击切换时的音效了

(RadioGroup)rgTab.setOnCheckedChangeListener(onCheckedChangeListener);
private OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() {
		@Override
		public void onCheckedChanged(RadioGroup group, int checkedId) {
			if(new AppConfig(MainActivity.this).soundOn()){
				rgTab.setSoundEffectsEnabled(true);
				rgTab.playSoundEffect(SoundEffectConstants.CLICK);//按键音效
			}
			switch(checkedId){
			case R.id.rb_1:
				break;
			case R.id.rb_2:
				break;
			case R.id.rb_3:
				break;
			}
		}
	};
另外,碰到GridView和ListView中item下绑定的控件,必须也得添加音效的设置了,这点不能忘记。

总结:建议在项目中尽量使用自定义的控件,这样不必每处都修改了

2.通过SoundPool播放自定义音效

参考http://blog.csdn.net/qq435757399/article/details/8010015

里面说的已经很详细了,我之前的测试结果是,好像会先播放系统自带的点击音效,再接着播放我们自定义的音效,应该可以通过在xml布局中为控件添加android:soundEffectsEnabled="false"来避免吧

欢迎大家指出不当之处!!

你可能感兴趣的:(android开发)