0

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を呼び出す方法はありますか?

4

1 に答える 1

0

解決策は、MediaPlayerオブジェクトを返すメソッドを記述してから、このオブジェクトに対してsetOnCompletionListener()を呼び出すことです。

public MediaPlayer getActiveMediaPlayer()
{
    if ( mediaPlayer != null )
        return this.mediaPlayer;
    else 
        return null;
}

そして、アクティビティで:

audioRecorder.getActiveMediaPlayer().setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {
            Log.d("MediaPlayer", "test");

        }
    });
于 2012-10-24T00:08:14.077 に答える