2013-10-11 35 views
0

我试图改变此项目的一些功能Media player从原始文件夹而不是从SD卡中读取mp3。但它会引发错误“尝试在没有有效的媒体播放器的情况下调用getDuration”请给出任何建议?尝试在没有有效媒体播放器的情况下调用getDuration

public void playSong(int songIndex){ // parameter is not used. is set static content 

    try { 
     mp.reset(); 
     mp = mp.create(this, R.raw.ledzepellin); // static content! 
     mp.prepare(); 
     mp.start(); 

     String songTitle = "title"; 
     songTitleLabel.setText(songTitle); 


     songProgressBar.setProgress(0); 
     songProgressBar.setMax(100); 


     updateProgressBar(); 

    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 


public void updateProgressBar() { 
    mHandler.postDelayed(mUpdateTimeTask, 100); 
} 


private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     long totalDuration = mp.getDuration(); // ---- HERE IT GIVE ME ERROR 
     long currentDuration = mp.getCurrentPosition(); 


     songTotalDurationLabel.setText(""+utils.milliSecondsToTimer(totalDuration)); 

     songCurrentDurationLabel.setText(""+utils.milliSecondsToTimer(currentDuration)); 


     int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration)); 

     songProgressBar.setProgress(progress); 


     mHandler.postDelayed(this, 100); 
    } 
}; 

在这里,我开始playSong方法首先它打开了我所有乐曲的列表视图当我选择TI给我回导致演员,但它不是重要的原料来源设置staticly

 btnPlaylist.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Intent i = new Intent(getApplicationContext(), PlayListActivity.class); 
      startActivityForResult(i, 100); 
     } 
    }); 

} 

@Override 
protected void onActivityResult(int requestCode, 
           int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == 100){ 
     currentSongIndex = data.getExtras().getInt("songIndex"); 

     playSong(currentSongIndex); 
    } 

} 
+0

你在哪里运行'playSong'方法? –

+0

代码更新看 – Yurdaaaaa

+0

@Yurdaaaaa,我面临同样的问题,请告诉我你是如何解决这个问题? –

回答

2

文档对于您要拨打的静态create方法说:

成功时,prepare()将被调用,不能再次调用。

是否没有其他错误被打印到logcat?您可以考虑使用setOnErrorListener添加一个错误侦听器,并且还可以查看状态图here。当MediaPlayer处于空闲或处于错误状态时,不应调用大多数方法。在你的情况下,我相信它在prepare()之后进入了一个错误状态,并且应该从那时起引发问题。

+0

谢谢你,我有点改变代码和功能,现在是代码小马车,但工作:) – Yurdaaaaa

+1

hello @Yurdaaaaa我得到了同样的错误你在功能上做什么改变请帮助我。 –

相关问题