MediaPlayerを拡張するクラスを実装しました。
public class AudioPlayer extends MediaPlayer {
private String fileName = null;
FileInputStream fileInputStream = null;
private MediaPlayer mediaPlayer = null;
// Constructor
public AudioPlayer(Context context)
{
// Initialization
}
public void onPlay(boolean start)
{
if(start) {
startPlaying(this.fileName);
}else {
stopPlaying(this.fileName);
}
}
private void startPlaying(String fileName) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(fileInputStream.getFD());
mediaPlayer.prepare();
mediaPlayer.start();
// mediaPlayer.setOnCompletionListener(new CompletionListener());
}
class CompletionListener implements MediaPlayer.OnCompletionListener {
@Override
public void onCompletion(MediaPlayer mp) {
// Do stuff
}
}
カスタムAudioPlayerクラス内のMediaPlayerオブジェクトにsetOnCompletionListenerを設定すると、正常に機能します。ただし、このリスナーは複数のアクティビティで使用されるため、このクラスから作成されたオブジェクトに設定したいと思います。onCompletion()メソッドではさまざまなアクションを実行する必要があるため、カスタムクラス内にonCompletionListenerを実装しても意味がありません。使用する各アクティビティでカスタムクラスのインスタンスを作成するとき
AudioPlayer audioPlayer = new AudioPlayer(context);
そしてそれにonCompletionListenerを設定します:
audioPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
}
});
呼び出されることはありません。カスタムオブジェクトでonCompletionListenerを呼び出す方法はありますか?