2016-10-26 5 views
0

Im пытается воспроизвести mp3-аудио с URL-адреса. Но при медленной сети игрок, похоже, не реагирует на буферизацию. Поэтому мне нужно добавить диалог прогресса при буферизации. Является ли это возможным.? если да, то кто-нибудь может мне помочь.Android MediaPlayer: как показать диалог выполнения при буферизации звука

public class Player extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_player); 
     Bundle b = new Bundle(); 
     b = getIntent().getExtras(); 
     final String url = b.getString("audio"); 
     Log.e("URL: ", url); 
     final MediaPlayer mMediaPlayer = new MediaPlayer(); 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     try { 
      Log.e("preparing: ", url); 
      mMediaPlayer.setDataSource(url); 
      mMediaPlayer.prepareAsync(); // might take long! (for buffering, etc) 
     } catch (IOException e) { 
      Toast.makeText(this, "mp3 not found", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } 

     //mp3 will be started after completion of preparing... 
     mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer player) { 
       int max = player.getDuration(); 
       Log.e("MAX", String.valueOf(max)); 
       player.start(); 
       Log.e("start: ", url); 
      } 
     }); 
    } 
} 
+0

с использованием 'MediaPlayer.OnBufferingUpdateListener'? – Blackbelt

+0

can u pls показать мне пример кода.? (знать, когда я должен позвонить dialog.show и когда уволить) –

+3

Я мог бы, но не буду. Попытайтесь приложить усилия, чтобы понять это самостоятельно. После попытки, если вам это не удастся, спросите еще раз. – Blackbelt

ответ

1

Вы можете показать SeekBar, что-то вроде:

// In your onCreate(), add below at last ....... 
. 
. 
. 
seekbar.setMax(mMediaPlayer.getDuration()); 
mMediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() { 
    public void onBufferingUpdate(MediaPlayer mp, int percent) 
    { 
     double ratio = percent/100.0; 
     bufferingLevel = (int)(mp.getDuration() * ratio); 

     seekBar.setSecondaryProgress(bufferingLevel); 
    } 

}); 

Надеется, что это помогает!