AndroId MediaPlayer prepareAsync method

前端 未结 2 943
旧巷少年郎
旧巷少年郎 2020-12-17 18:51

I have a strange problem. I use the prepareAsync method with the MediaPlayer, but the listener that I declared just never gets fired. I try to stream a live

相关标签:
2条回答
  • 2020-12-17 19:15

    You are setting the OnPreparedListener in your Activity's create method and later on, possibly, creating a new MediaPlayer in your preparePlayer() method. Any newly created MediaPlayer's wont have the prepareListener set. You should also add an errorlistener to find out whats going on.

    You may want to move the setOnPreparedListener call inside the

      if (mediaPlayer == null) {
        mediaPlayer = new MediaPlayer();
    }
    

    as well as setting a setOnErrorListener like so:

    if (mediaPlayer == null) {
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setOnErrorListener(....);
        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
            public void onPrepared(MediaPlayer mp) {
                ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton);
                playButton.setClickable(true);
                mp.start();
            }
        });
    }
    

    Please change e.printStackTrace(); to

    Log.e("tag", e.getMessage(), e);  
    

    Hope this helps, let us know if you have any log data as this will also be useful.

    0 讨论(0)
  • 2020-12-17 19:15

    Turned out, I forgot to mention the "@Override" on top of my inner method. Like this :

    mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton);
            playButton.setClickable(true);
            mp.start();
        }
    });
    

    Now everything works fine. Well... almost, since it takes forever to buffer...

    0 讨论(0)
提交回复
热议问题