2017-10-16 91 views
-1

你好我所有的媒體播放器,從URL播放歌曲,所以在歌曲完成後,播放按鈕切換到停止按鈕...所以我希望每當再次點擊按鈕播放歌曲另一個時間,我不知道該怎麼做。在完成歌曲播放按鈕切換到停止按鈕之後,所以不知道的是如何重置媒體播放器並重新設置數據源,因此您可以檢查我的代碼並告訴我在哪裏放置它android媒體播放器再次播放歌曲

這是我的代碼希望你能幫助我,謝謝。

public class MusicPlayerActivity extends AppCompatActivity implements Runnable, 
     SeekBar.OnSeekBarChangeListener { 

ImageView playpause; 
SeekBar seekBar; 
ImageView download; 
MediaPlayer mp = null; 
int len = 0; 
boolean isPlaying = false; 


public MusicPlayerActivity() throws IOException { 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_music_player); 
    final String url = getIntent().getExtras().getString("musicurl"); 
    playpause = (ImageView)findViewById(R.id.imageView); 
    seekBar = (SeekBar)findViewById(R.id.seekBar); 
    playpause.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if(!isPlaying){ 
       playpause.setImageResource(R.drawable.pause); 
       mp.pause(); 
       len = mp.getCurrentPosition(); 
       seekBar.setEnabled(false); 


      }else{ 
       playpause.setImageResource(R.drawable.play); 
       mp.seekTo(len); 
       mp.start(); 
       seekBar.setEnabled(true); 

      } 
      isPlaying = !isPlaying; 



     } 
    }); 

    mp = new MediaPlayer(); 
    try { 
     mp.setDataSource(url); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     mp.prepare(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    //if(mp.isPlaying()) mp.stop(); mp.release(); 
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mediaPlayer) { 
      mediaPlayer.reset(); 
      seekBar.setProgress(0); 
      playpause.setImageResource(R.drawable.pause); 

     } 
    }); 
    mp.start(); 
    seekBar.setMax(mp.getDuration()); 

    new Thread(this).start(); 
    seekBar.setOnSeekBarChangeListener(this); 


    // Toast.makeText(this, mp.getDuration(), Toast.LENGTH_SHORT).show(); 


} 
@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
           boolean fromUser) { 
    try { 
     if (mp.isPlaying() || mp != null) { 
      if (fromUser) 
       mp.seekTo(progress); 
     } else if (mp == null) { 
      Toast.makeText(getApplicationContext(), "Media is not running", 
        Toast.LENGTH_SHORT).show(); 
      seekBar.setProgress(0); 
     } 
     //if(progress==seekBar.getMax()) seekBar.setProgress(0); 

    } catch (Exception e) { 
     Log.e("seek bar", "" + e); 
     seekBar.setEnabled(false); 

    } 

} 

@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 

} 

@Override 
public void onStopTrackingTouch(SeekBar seekBar) { 

} 

public void run() { 
    int currentPosition = mp.getCurrentPosition(); 
    int total = mp.getDuration(); 

    while (mp != null && currentPosition < total) { 
     try { 
      Thread.sleep(1000); 
      currentPosition = mp.getCurrentPosition(); 


     } catch (InterruptedException e) { 
      return; 
     } catch (Exception e) { 
      return; 
     } 
     seekBar.setProgress(currentPosition); 


    } 
    seekBar.setProgress(0); 


} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      mp.stop(); 
      startActivity(new Intent(this,MainActivity.class)); 
      break; 
    } 
    return true; 
} 
@Override 
public void onBackPressed() { 
    Intent mainActivity = new Intent(Intent.ACTION_MAIN); 
    mainActivity.addCategory(Intent.CATEGORY_HOME); 
    mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(mainActivity); 
} 
} 
+0

是否要再次單擊該按鈕並重新播放歌曲?或者你只是想讓這首歌重演。 – samirk433

+0

我想重播這首歌 –

回答

0

這是你的媒體播放器收聽完成:現在

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
     mediaPlayer.reset(); 
     seekBar.setProgress(0); 
     playpause.setImageResource(R.drawable.pause); 

    } 
}); 


,在這個監聽器重新啓動首歌曲,如下圖所示。如果它需要重置數據源,那麼請按照以下步驟操作:

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 


    // if data-source setting is required: 
    // 
    // try { 
    //  mp.setDataSource(url); 
    //  mp.prepare(); 
    // } catch (IOException e) { 
    //  e.printStackTrace(); 
    // } 
     mediaPlayer.start(); 

    } 
});