1. 程式人生 > >android:為你的app設定音效

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"來避免吧

歡迎大家指出不當之處!!