2012年8月4日 星期六

Android: AudioManager控制音量&MediaPlayer


package com.myaudiomgt;

import....

public class MainActivity extends Activity {
SeekBar sb;
AudioManager mger;
MediaPlayer mp;
int max, cur;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sb = (SeekBar) findViewById(R.id.seekBar1);
//取得AudioManager物件,由於此方法回傳為Object物件,因此要轉型
mger = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
//音樂放在專案檔內,因此使用此方法取得MediaPlayer物件
mp = MediaPlayer.create(this, R.raw.music);
//利用AudioManager的方法取得最大音量以及目前音量
max = mger.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
cur = mger.getStreamVolume(AudioManager.STREAM_MUSIC);
//將最大音量以及目前音量設給SeekBar
sb.setMax(max);
sb.setProgress(cur);
//SeekBar監聽物件
sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
//調整音量
mger.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
}

public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}

public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}

});
}

public void but1_onclick(View v) throws IllegalStateException, IOException {
//這個If判斷式很重要,要記得判斷MediaPlayer的狀態
if (mp != null)
mp.stop();
mp.prepare();
mp.start();

}

public void but2_onclick(View v) {
mp.pause();

}

public void but3_onclick(View v) {
mp.stop();

}

@Override
//加上這段讓Activity在Pause階段,MediaPlayer釋放掉資源,不會一直撥放音樂
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
mp.release();
}

}

沒有留言:

張貼留言