如何使用MediaPlayer再次播放/停止/播放

时间:2016-04-13 01:53:45

标签: android audio

点击它时会有一个按钮播放音频,当它正在播放时我可以暂停它并重播它等等。我有一个震动事件,我想在摇动时播放音频并在设备再次震动时重放它(首先停止音频,呼叫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,如果在中间停止然后再次重播就停止。

按钮点击有效,但我每次创建一个新实例而不是回收。当设备被摇动时,它会播放音频两次而不是一次。

1 个答案:

答案 0 :(得分:1)

首先在上下文的onCreate中创建MediaPlayer,而不是在某些听众中,并且在完成后不要忘记释放它,因为它消耗了大量资源,

mediaPlayer.release();
mediaPlayer = null;

接下来,在完成歌曲时使用stop()功能而不是pause()停止音频。

步骤

如果您正在使用服务/活动来播放视频,请在开始使用之前创建MediaPlayer实例,可能在onCreate中。

稍后使用该实例播放/暂停/停止媒体。

在Service / Activity的onStop上发布MediaPlayer实例。

更新你的playMusic()函数以使用你刚创建的MediaPlayer实例,也可以在监听器中使用stop()而不是pause()

更改现有MediaPlayer实例的跟踪

您可以使用:

String path = getExternalFilesDir(null).toString()+"/";

mMediaPlayer.setDataSource(path + mediafile);

链接:Changing data source for audio playback using existing MediaPlayer?