有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

MP3媒体播放器上的java加载对话框prepare()

我是安卓开发的新手。我有一个mp3音频播放器代码,可以从url播放mp3。我想在媒体播放器缓冲准备时显示加载对话框

这是我的代码,我在prepare上显示了一个对话框,但它持续运行,不能播放mp3。 我不知道我在哪里定义smp。setOnPreparedListener。请告诉我,我可以定义这个内部播放功能还是外部播放功能。请帮我这是我的密码。请提前谢谢

//播放MP3功能

public void  playSong(int naatindex){
    // Play song
    try {

        mp.reset();
        mp.setDataSource(naatpaths[naatindex]);
        tv = (TextView) this.findViewById(R.id.mywidget);  
        tv.setSelected(true);  // Set focus to the textview
        tv.setText(naattitles[naatindex]);
        mp.prepare();
        mp.start();
        // Changing Button Image to pause image
        btnPlay.setImageResource(R.drawable.btn_pause);
        // set Progress bar values
        songProgressBar.setProgress(0);
        songProgressBar.setMax(100);
        // Updating progress bar
        updateProgressBar();            
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这是我的议员。setOnPreparedListener代码

ProgressDialog progressDialog = ProgressDialog.show(this, 
                        "Loading Title", "Loading Message");
   mp.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
           if (progressDialog != null && progressDialog.isShowing()){
              progressDialog.dismiss();
           }
            mp.start();
     }
 });

共 (1) 个答案

  1. # 1 楼答案

    在playSong()中,可以调用:

    mp.prepare();
    mp.start();
    

    如果您直接启动播放器,它将崩溃,因为它可能尚未准备好播放。试试这个:

    MediaPlayer mp = new MediaPlayer();
    mp.setDataSource(naatpaths[naatindex]);
    mp.setOnPreparedListener(new OnPreparedListener(){
    
    @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        if (progressDialog != null && progressDialog.isShowing())
                      progressDialog.dismiss();
    
        }
    });
    mp.prepareAsync();           //this will prepare file a.k.a buffering
    songProgressBar.setProgress(0);
    songProgressBar.setMax(100);
    // Updating progress bar
    updateProgressBar();
    

    如果仍然无法播放,请检查流url。它可能已经死了。还可以尝试记录播放器的状态。检查stacktrace是否有任何异常