【问题标题】:stop playing sound when another sound is playing in android studio在android studio中播放另一个声音时停止播放声音
【发布时间】:2019-06-25 18:09:07
【问题描述】:

你好,我在 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();
        }
    }
}

【问题讨论】:

    标签: java android android-mediaplayer media-player onclicklistener


    【解决方案1】:

    每次单击某些内容并将变量分配给新对象时,您都在创建新的 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
    }
    

    【讨论】:

    • 我编辑了我的代码,我使用了实现 View.OnClickListener 。问题不属于实现 View.OnClickListener
    • @Azad Qaderzadeh 这无关紧要;您无法停止媒体的原因可能是因为您在播放的实例之外的实例上调用了 stop() 。只需应用此代码并说出会发生什么;
    【解决方案2】:

    嗯,看起来你不想播放很长的声音,因为你有像这样的名字 代码中的“fart_ballade”和“fart_uverture”。

    如果您的声音不是很长,最好使用 SoundPool 类。

    如果您在声音之间快速切换,MediaPlayer 类有时会导致问题。

    所以如果你的声音不是那么长,你可以试试SoundPool 类。

    在这里您可以了解更多关于SoundPool 类的信息:

    How to use SoundPool

    我不会编写任何代码,因为 SoundPool 需要超过 5-6 行代码才能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      相关资源
      最近更新 更多