java - 当另一个声音在 android studio 中播放时停止播放声音

标签 java android android-mediaplayer media-player onclicklistener

您好,我在 android studio 的项目中使用 MediaPlayer 播放声音 当我单击一个按钮并播放声音时,当我单击另一个按钮时该按钮播放另一种声音,我希望第一个声音或另一个声音停止,只播放我单击的最后一个按钮 我尝试了这段代码,但没有成功

package azad.broooska.fartfuns;

import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;

import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;


public class MusicFartActivity extends AppCompatActivity implements View.OnClickListener {
    private CardView cardView1, cardView2, cardView3, cardView4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_music_fart);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        cardView1 = findViewById(R.id.card_music1);
        cardView2 = findViewById(R.id.card_music2);
        cardView3 = findViewById(R.id.card_music3);
        cardView4 = findViewById(R.id.card_music4);
        cardView1.setOnClickListener(this);
        cardView2.setOnClickListener(this);
        cardView3.setOnClickListener(this);
        cardView4.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        int id = view.getId();
        final MediaPlayer s1 = MediaPlayer.create(this, R.raw.bohemian_fartsody);
        final MediaPlayer s2 = MediaPlayer.create(this, R.raw.fart_ballade);
        final MediaPlayer s3 = MediaPlayer.create(this, R.raw.fart_uverture);
        final MediaPlayer s4 = MediaPlayer.create(this, R.raw.farting_xmas);
        if (id == R.id.card_music1) {
            s1.start();
            s2.stop();
            s3.stop();
            s4.stop();
        } else if (id == R.id.card_music2) {
            s2.start();
            s1.stop();
            s3.stop();
            s4.stop();
        } else if (id == R.id.card_music3) {
            s3.start();
            s2.stop();
            s1.stop();
            s4.stop();
        } else {
            Toast.makeText(this, "noThing", Toast.LENGTH_SHORT).show();
        }
    }
}

最佳答案

每次单击某物并将变量分配给新对象时,您都会创建 MediaPlayer 的新实例;制作 s1,s2... 类属性;

MediaPlayer s1 ,s2,s3,s4;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_music_fart);
    //some code
    s1 = MediaPlayer.create(this, R.raw.bohemian_fartsody);
    //assign the rest;
}
public void onClick(View view) {
    int id = view.getId();
    if (id == R.id.card_music1) {
        s1.start();
        s2.stop();
        s3.stop();
        s4.stop();
    }
    //rest of the code
}

关于java - 当另一个声音在 android studio 中播放时停止播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56759787/

相关文章:

Java Split 丢弃空数组元素

java - 可序列化的简单对象 IOException

Java 8 映射集合并在集合为空时添加默认值

php - 未找到 Android 跟踪代码管理器,因此不会使用

android - 如何在 firestore 文档的字段中搜索

android - 同时下载+缓存+播放音频

java - 为具有 2 列(字符串、整数)和 n 行的 JTable 实现自定义 CellEditor

android - 从 Adapter 中的 Resources 获取一个字符串

android - mediaplayer.pause() 不工作

java - 如何防止我的音乐播放器在电话铃声响起并挂断电话后启动?