2014-01-16 36 views
0

我有这样的代码:如何使Android MediaPlayer更快?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button btSobre = (Button)findViewById(R.id.btInfo);  
    btPlay = (Button)findViewById(R.id.btPlay); 

    playTask = new PlayAsyncTask(); 
    mediaPlayer = new MediaPlayer(); 

    btPlay.setOnClickListener(new OnClickListener() {   
     @Override 
     public void onClick(View v) { 
     //playTask.execute();  
      try { 
       mediaPlayer.setDataSource("http://************"); 
      } catch (Exception e) {     
       e.printStackTrace(); 
      } 
      try { 
       mediaPlayer.prepare(); 
      } catch (Exception e) {     
       e.printStackTrace(); 
      } 

      if(mediaPlayer.isPlaying()){ 
       mediaPlayer.stop(); 
       imagemPlay(); 
      } else { 
       mediaPlayer.start(); 
       imagemPlay(); 
      }    
     } 
    });  

} 

//Troca a imagem do botão play. 
private void imagemPlay() { 
    if(mediaPlayer.isPlaying()){ 
     btPlay.setBackgroundResource(android.R.drawable.ic_media_pause); 
    } else { 
     btPlay.setBackgroundResource(android.R.drawable.ic_media_play); 
    } 

} 

当我ckick的按钮来播放,它需要一些时间来播放音乐。我该如何做得更快,或者向用户提供一些反馈? 像装载机或其他东西一样。

回答

1

您每次点击播放时都会准备。尝试检查它是否先播放,然后停止播放。如果它没有玩,就休息一下。试试这个重构的代码,看看它是否有点快:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button btSobre = (Button)findViewById(R.id.btInfo);  
    btPlay = (Button)findViewById(R.id.btPlay); 

    playTask = new PlayAsyncTask(); 
    mediaPlayer = new MediaPlayer(); 

    btPlay.setOnClickListener(new OnClickListener() {   
     @Override 
     public void onClick(View v) 
     { 

      try 
      { 
       imagemPlay(); 

       if(mediaPlayer.isPlaying()) 
       { 
        mediaPlayer.stop(); 
        return; 
       } 

       mediaPlayer.setDataSource("http://************"); 
       mediaPlayer.prepare(); 
       mediaPlayer.start(); 
      } 
      catch (Exception e) 
      {     
       e.printStackTrace(); 
      } 
    });  

} 

//Troca a imagem do botão play. 
private void imagemPlay() { 
    if(mediaPlayer.isPlaying()){ 
     btPlay.setBackgroundResource(android.R.drawable.ic_media_pause); 
    } else { 
     btPlay.setBackgroundResource(android.R.drawable.ic_media_play); 
    } 

} 
+0

我也不确定是否需要setDataSource每次和准备。 –

+0

我会尽力的。 Thaks。 – Roland