【问题标题】:How can I make the same button that plays the audio, stop when the button is clicked?如何制作播放音频的相同按钮,单击按钮时停止?
【发布时间】:2021-08-21 22:38:47
【问题描述】:

如何制作播放媒体文件的相同按钮,停止它?到目前为止,这是我尝试过的,但问题是每当我按下按钮尝试播放和停止音乐时,它都会在运行日志中出现错误并且没有任何反应。我还在学习东西,所以如果有人可以解释如何以正确的方式播放和停止音频以及使其正常运行所需的任何其他内容,那就太好了。我对 MediaPlayer 状态比较熟悉,只是我无法正确组合代码。谢谢。

import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final MediaPlayer musicMP = MediaPlayer.create(this, R.raw.lofi);

        Button playMusic = this.findViewById(R.id.bell_peppers_and_beef);

        playMusic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                musicMP.start();
                musicMP.stop();
            }
        });}}

运行日志错误:

E/MediaPlayerNative:在状态 64 中开始调用,mPlayer(0x720df4c340) V/MediaPlayerNative: 收到消息 msg=100, ext1=-38, ext2=0 E/MediaPlayerNative: 错误 (-38, 0) V/MediaPlayer-JNI: 停止 V/MediaPlayerNative:停止 E/MediaPlayerNative:在状态 0 中停止调用, mPlayer(0x720df4c340) V/MediaPlayerNative: 收到消息 msg=100, ext1=-38, ext2=0 E/MediaPlayerNative: 错误 (-38, 0)

【问题讨论】:

    标签: java android


    【解决方案1】:

    MediaPlayer 有isPlaying() 方法:

    if (mediaPlayer.isPlaying()) {
        mediaPlayer.pause();
    } else {
        mediaPlayer.start();
    }
    

    但是如果你想调用stop(),那么你还需要调用prepare()才能再次调用start()(你can't直接从stopped状态进入开始状态):

    if (mediaPlayer.isPlaying()) {
        mediaPlayer.stop();
        mediaPlayer.prepare();
    } else {
        mediaPlayer.start();
    }
    

    您可以在documentation 中查看所有允许的状态转换。

    【讨论】:

    • 这是正确答案。另一种方法是使用与当前播放状态相匹配的内部变量,但使用mediaPlayer.isPlaying() 仍然会更正确和准确,因为它还会考虑播放器停止的其他不涉及用户输入的原因。
    • 我会在 MusicMP.start() 下添加这个??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多