java - 如何在单击按钮时停止播放声音以启动另一个声音文件?

标签 java android audio android-mediaplayer

我有两个按钮和两首歌曲。如果我单击第一个按钮,则会播放第一个声音。但是,如果我在第一个声音播放时单击第二个按钮,第二个声音也会开始播放。
如何停止其他声音?

我的代码:

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

    final MediaPlayer johnCenaPlayer = MediaPlayer.create(this, R.raw.john_cena);
    Button johnCenaButton = (Button) findViewById(R.id.john_cena_button);
    johnCenaButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            johnCenaPlayer.start();
        }
    });

    final MediaPlayer haGayPlayer = MediaPlayer.create(this, R.id.ha_gay_button);
    Button haGayButton = (Button) findViewById(R.id.ha_gay_button);
    haGayButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            haGayPlayer.start();
        }
    });
}

最佳答案

使用 stop() 方法停止 clickListener 中的其他 MediaPlayer。

public void onClick(View view) {
    ha_gay.stop()
    john_cena.start();
}
<小时/>

如果您有许多音频文件,请使用单个 MediaPlayer 并动态更改源。

public class MainActivity extends AppCompatActivity {


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

    final MediaPlayer mediaPlayer = new MediaPlayer();

    Button john_cena_button = (Button) findViewById(R.id.john_cena_button);
    john_cena_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            stopAndPlay(R.raw.john_cena, mediaPlayer);
        }
    });

    Button ha_gay_button = (Button) findViewById(R.id.ha_gay_button);
    ha_gay_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            stopAndPlay(R.raw.ha_gay, mediaPlayer);
        }
    });
}

// This resets the mediaPlayer and starts the given audio
private void stopAndPlay(int rawId, MediaPlayer mediaPlayer) {
    mediaPlayer.reset();
    AssetFileDescriptor afd = this.getResources().openRawResourceFd(rawId);
    try {
        mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        mediaPlayer.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer.start();
}

}

关于java - 如何在单击按钮时停止播放声音以启动另一个声音文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48054515/

相关文章:

javascript - 音频当前时间的JavaScript比较导致无尽的while循环

java - 在Java中接收eth链接状态通知的变化(在Linux中)

Java:基于文本的 rpg 游戏中的 setText GUI 代码

java - Android - 带倒计时的定时游戏,可使用剩余时间更新 UI,同时用户仍然可以与 UI 交互

android - 升级支持设计库后,抽屉导航中的多个复选框组停止工作

php - Symfony 访问 web 目录之外的 mp3 文件以在浏览器中播放

java - 用户定义泛型类的 Spring TypeDescriptor

java - 我应该如何在 Java 的应用程序层之间传递主题/主体/角色?

android - 如何解决找不到构建工具修订版 26.0.2?

android - 将 Alsa 移植到 Android