我试图做一个小的音乐文件阅读器项目,我用下面的代码母猪我可以播放音乐和暂停它,但一旦我停止它,并点击一个按钮,从一开始播放它的音乐不播放我用下面的代码,我不知道如何解决这个问题。
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");
}
});
}
选项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");
}
});
方案二 : 呼叫时 mp.reset();
你把对象恢复到了它的Idle状态,这就是为什么音乐不能被播放的原因。你必须通过调用以下方法将对象转移到初始化状态 mp.setResource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +String.valueOf("/myfile.mp3"));
然后 mp.prepare();
像这样的。
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的详细介绍就知道了。这里。
从文档的状态机来看,似乎你必须使用
mp.stop()
mp.prepare()
mp.start()
这将完成状态机。
在你的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);
}
});
}
}