点击它时会有一个按钮播放音频,当它正在播放时我可以暂停它并重播它等等。我有一个震动事件,我想在摇动时播放音频并在设备再次震动时重放它(首先停止音频,呼叫stopAudio
?)
我有以下代码:
llBtn = (LinearLayout) findViewById(R.id.button);
llBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(MainActivity.this, "LL WAS CLICKED", Toast.LENGTH_SHORT).show();
//IF AUDIO IS NOT PLAYING... PLAY AUDIO
if (tvPS.getText() == "Stop Phrase!") {
StopAudio();
}
else {
PlayAudio();
}
}
});
//the same button is clicked to stop, it is currently setting to Pause.
public void StopAudio() {
mediaPlayer.pause();
Toast.makeText(MainActivity.this, "STOPPED", Toast.LENGTH_SHORT).show();
tvPS.setText("Play Phrase!");
}
public void PlayAudio() {
//stopPlaying(mediaPlayer);
tvPS.setText("Stop Phrase!");
inResId = getResources().getIdentifier("play" , "raw", getPackageName());
mediaPlayer = MediaPlayer.create(getBaseContext(), inResId);
mediaPlayer.seekTo(0);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_SHORT).show();
tvPS.setText("Play Phrase!");
mediaPlayer.pause();
}
});
}
...
public void onShake() {
// Do stuff!
Toast.makeText(getBaseContext(), "Motion detected",
Toast.LENGTH_SHORT).show();
if (mediaPlayer == null) {
PlayAudio();
}
}
如何修改上面的代码来处理Play,如果在中间停止然后再次重播就停止。
按钮点击有效,但我每次创建一个新实例而不是回收。当设备被摇动时,它会播放音频两次而不是一次。
答案 0 :(得分:1)
首先在上下文的onCreate中创建MediaPlayer
,而不是在某些听众中,并且在完成后不要忘记释放它,因为它消耗了大量资源,
mediaPlayer.release();
mediaPlayer = null;
接下来,在完成歌曲时使用stop()
功能而不是pause()
停止音频。
如果您正在使用服务/活动来播放视频,请在开始使用之前创建MediaPlayer实例,可能在onCreate中。
稍后使用该实例播放/暂停/停止媒体。
在Service / Activity的onStop上发布MediaPlayer实例。
更新你的playMusic()函数以使用你刚创建的MediaPlayer实例,也可以在监听器中使用stop()而不是pause()
您可以使用:
String path = getExternalFilesDir(null).toString()+"/";
mMediaPlayer.setDataSource(path + mediafile);
链接:Changing data source for audio playback using existing MediaPlayer?