Java MediaPlayer只播放一次
我使用startActivityForResult从列表视图中获取音乐文件的路径,然后使用Java MediaPlayer只播放一次,java,android,android-listview,android-mediaplayer,Java,Android,Android Listview,Android Mediaplayer,我使用startActivityForResult从列表视图中获取音乐文件的路径,然后使用MediaPlayer.setDataSource(string)为MediaPlayer设置该字符串第一次使用按钮播放歌曲时,它可以正常播放,如果在播放歌曲时单击按钮,它将重置并再次播放 if (mMediaPlayer.isPlaying()) { mMediaPlayer.reset(); } 但如果我点击按钮播放完成,它将不会再次播放
MediaPlayer.setDataSource(string)为MediaPlayer设置该字符串代码>第一次使用按钮播放歌曲时,它可以正常播放,如果在播放歌曲时单击按钮,它将重置并再次播放
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.reset();
}
但如果我点击按钮播放完成,它将不会再次播放
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.reset();
}
startActivityForResult
Intent i = new Intent(MainActivity.this, Activityone.class);
startActivityForResult(i, 0);
mMediaPlayer.reset();
在Listview中:
music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
String filename = musiccursor.getString(music_column_index);
Intent person = new Intent();
Bundle backpack = new Bundle();
backpack.putString("arnswer", filename);
person.putExtras(backpack);
setResult(RESULT_OK, person);
finish();
onActivityResult:
if (resultCode == RESULT_OK){
if(requestCode == 0) {
// handling code of startActivityForResult of first button
Bundle basket = data.getExtras();
s = basket.getString("arnswer");
}
和启动MediaPlayer的按钮:
public void pbutton1(View view) {
try {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.reset();
}
mMediaPlayer.setDataSource(s); //using string here
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (Exception e) {
}
日志:
我认为您需要mmediplayer.seekTo(0)
才能重播,因为它已经完成了
编辑:
查看已启动
播放已完成
之间的图表似乎只是重新启动播放器的一个操作。。。您不需要准备您所拥有的(
我理解您希望prepare
的原因,因此我建议OnCompletetionListener
到mMediaPlayer.stop()
,以便移动到Stopped
状态并准备好下一步prepare()
!我认为您需要mMediaPlayer.seekTo(0)
,以便重播,因为它已经完成
编辑:
查看已启动
播放已完成
之间的图表似乎只是重新启动播放机的一个操作…您不需要准备
,您有:(
我理解您希望prepare
的原因,因此我建议OnCompletetionListener
到mMediaPlayer.stop()
,以便移动到Stopped
状态,并为下一步prepare()
!此代码非常有效。我希望能帮助您
public class PianoActivity extends Activity {
private MediaPlayer mediaPlayer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_piano);
setupUI();
}
@Override
protected void onPause() {
super.onPause();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
private void setupUI() {
findViewById(R.id.doo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
managerOfSound();
}
});
}
private void managerOfSound() {
mediaPlayer = MediaPlayer.create(this, R.raw.doo);
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
} else {
mediaPlayer.stop();
}
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
mp.release();
}
});
}
}这段代码运行得很好。我希望能帮助您
public class PianoActivity extends Activity {
private MediaPlayer mediaPlayer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_piano);
setupUI();
}
@Override
protected void onPause() {
super.onPause();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
private void setupUI() {
findViewById(R.id.doo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
managerOfSound();
}
});
}
private void managerOfSound() {
mediaPlayer = MediaPlayer.create(this, R.raw.doo);
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
} else {
mediaPlayer.stop();
}
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
mp.release();
}
});
}
}这样只会播放两次声音。好多了!添加了其他建议!我刚刚添加了OnCompletionListener并添加了mmediplayer.stop(),结果仍然相同,歌曲完成后,在我不重新加载之前无法再次播放,这样只能播放两次声音。更好!添加了其他建议!我刚刚添加了OnCompletionListener并添加了mmediplayer.stop(),结果仍然相同,歌曲完成后,在我不重新加载之前无法再次播放