android媒体播放器再次播放歌曲

问题描述:

你好我所有的媒体播放器,从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

我想重播这首歌 –

这是你的媒体播放器收听完成:现在

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(); 

    } 
});