我试图制作一个小型音乐文件阅读器项目,我使用下面的代码播种了我可以播放音乐并暂停它的方法,但是一旦我停止它并单击一个按钮从头开始播放音乐就不会播放 我使用下面的代码,但我不知道如何解决该问题:
final MediaPlayer mp=new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mp.setDataSource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));
} catch (IOException e) {
e.printStackTrace();
}
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!mp.isPlaying()){
try{
mp.prepare();
}catch(Exception e){e.printStackTrace();}
mp.start();
btn1.setText("pause");
}else{
mp.pause();
btn1.setText("play");
}
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
mp.reset();
btn2.setVisibility(btn2.INVISIBLE);
btn1.setText("play");
}
});
}
答案 0 :(得分:1)
选项1 :您可以在调用mp.seekTo(0);
之后从mp.stop();
开始返回,也可以像这样删除mp.reset();
:
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
mp.seekTo(0);
btn2.setVisibility(btn2.INVISIBLE);
btn1.setText("play");
}
});
选项2 :调用mp.reset();
时,您正在将对象恢复到“空闲”状态,这就是为什么不能播放音乐的原因。您必须先调用mp.setResource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));
,然后再调用mp.prepare();
,将对象转移到Initialized状态,如下所示:
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
mp.reset();
btn2.setResource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));
mp.prepare();
btn1.setText("play");
}
});
我建议您选择选择1
我希望这会有所帮助。我还没有做过任何android编程,但是我知道一些Java并阅读了有关MediaPlayer的详细信息,here.
答案 1 :(得分:0)
从文档的状态机看来,您必须使用
mp.stop()
mp.prepare()
mp.start()
这将完成状态机。
答案 2 :(得分:0)
将这些代码行添加到您的btn2 onClick
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
mp.reset();
btn2.setVisibility(btn2.INVISIBLE);
btn1.setText("play");
mp=new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mp.setDataSource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));
} catch (IOException e) {
e.printStackTrace();
}
}
});
重置后,它将修复媒体播放器以再次播放。
这是我根据需要实现的代码,除了我正在从RAW文件夹加载音乐
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button stopButton = (Button) findViewById(R.id.button_stop);
final Button playButton = (Button) findViewById(R.id.button_play);
mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.file);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!mediaPlayer.isPlaying()){
mediaPlayer.start();
playButton.setText("pause");
stopButton.setVisibility(View.VISIBLE);
}else{
mediaPlayer.pause();
playButton.setText("play");
}
}
});
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
mediaPlayer.reset();
stopButton.setVisibility(INVISIBLE);
playButton.setText("play");
mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.file);
}
});
}
}