【问题标题】:How to play/stop/play again using MediaPlayer [duplicate]如何使用 MediaPlayer 再次播放/停止/播放 [重复]
【发布时间】:2016-04-13 01:53:45
【问题描述】:

我有一个按钮,单击它会播放音频,在播放时我可以暂停它并再次重播,依此类推。我有一个摇动事件,我想在摇动时播放音频并在设备再次摇动时重播(首先停止音频,调用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();
    }
}

如何修改上面的代码来处理播放,如果中途停止则停止,然后可以再次重播。

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

【问题讨论】:

    标签: android audio


    【解决方案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?

    【讨论】:

    • 我正在播放多个音频,但此处未列出 resID 不同。我可以创建一个空白的 mediaPlayer 并在整个活动中使用它吗?
    • 我已经编辑了答案,看看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多