前回のまま続けると、また同じ事になりそうなので新しくclassを作って分離。
MusicPlayer class。見たままです。貼っときます。
package net.asasvata.sdmediaplayer;
import java.util.ArrayList;
import android.media.MediaPlayer;
import android.os.Environment;
public class MusicPlayer extends MediaPlayer
implements MediaPlayer.OnCompletionListener {
private MediaPlayer mediaPlayer;
private ArrayList<String> musicList;
private int musicNum;
public MusicPlayer(ArrayList<String> list) {
this.musicList = list;
musicNum = 0;
//mediaPlayerの生成と曲が終わったときの処理の準備
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnCompletionListener(this);
}
public int getMusicNum() {
return musicNum;
}
public void setMusicNum(int num) {
musicNum = num;
}
//音楽ファイルのパスを取得してスタート。
public void playMusic() {
mediaPlayer.reset();//これが要る様だ。
try{
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory().getPath()
+ "/" + musicList.get(musicNum));
mediaPlayer.prepare();
mediaPlayer.seekTo(0);
mediaPlayer.start();
} catch (Exception e) {
System.exit(-1);
}
}
public void stopMusic() {
mediaPlayer.stop();
try {
mediaPlayer.prepare();
} catch (Exception e) {
System.exit(-1);
}
}
//残り3秒まで飛びます。
public void skipMusic() {
int duration = mediaPlayer.getDuration();
mediaPlayer.seekTo(duration - 3000);
}
//getterを作ってもいいんですが、何となく。
public boolean isPlayMusic() {
return mediaPlayer.isPlaying();
}
//曲が終わったときの処理
public void onCompletion(MediaPlayer mp) {
if (++musicNum < musicList.size()) {
playMusic();
} else {
musicNum = 0;
playMusic();
}
}
}
SDMediaPlayerActivityの方は
//mpの生成以下の3行削除で、
//musicPlayerの生成とmusicNumの取得
musicPlayer = new MusicPlayer(musicList);
musicNum = musicPlayer.getMusicNum();
↑を追加。後は、onClickを
public void onClick(View view) {
musicNum = musicPlayer.getMusicNum();
if (musicPlayer.isPlayMusic()) {
if (view == btnStart) {
if (++musicNum < musicList.size()) {
musicPlayer.setMusicNum(musicNum);
musicPlayer.playMusic();
} else {
musicPlayer.setMusicNum(0);
musicPlayer.playMusic();
}
}
else if (view == btnStop) musicPlayer.stopMusic();
else if (view == btnSkip) musicPlayer.skipMusic();
} else {
if (view == btnStart) musicPlayer.playMusic();
}
}
んな感じに変更。 動きに変化はありません。が、何となくすっきり。
したと思いたい。
次は、またちょっとだけ変更予定。
0 件のコメント:
コメントを投稿