【问题标题】:Can I set onCompletionListener() to an object that is an instance of the class that extends MediaPlayer?我可以将 onCompletionListener() 设置为作为扩展 MediaPlayer 的类的实例的对象吗?
【发布时间】:2012-10-24 08:08:14
【问题描述】:

我已经实现了一个扩展 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 对象上设置 OnCompletionListener 时,它工作得很好。但是,我想在 从此类创建的对象 上设置此侦听器,因为它用于多个活动。在 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?

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    解决办法是写一个方法,返回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");
    
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多