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

问题描述 投票:0回答:2

目前,我只有两个按钮和两首歌曲。如果单击第一个按钮,则会播放第一个声音。但是,如果我单击第二个按钮(如果正在播放第一个声音),那么第二个声音也将开始播放。如何停止其他声音?目前,我正在使用此代码:

package com.example.nikod.multisoundboard;

import android.media.MediaPlayer;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.Button;  

public class MainActivity extends AppCompatActivity {

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

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

    final MediaPlayer ha_gay = MediaPlayer.create(this, R.id.ha_gay_button);
    Button ha_gay_button = (Button) findViewById(R.id.ha_gay_button);
    ha_gay_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ha_gay.start();
        }
    });
}
}
java android audio android-mediaplayer
2个回答
1
投票

使用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();
}

}

0
投票

尝试这个。其他也一样。

final MediaPlayer john_cena = MediaPlayer.create(this, R.raw.john_cena);
Button john_cena_button = (Button) findViewById(R.id.john_cena_button);
john_cena_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (he_gay.isPlaying()){
             he_gay.stop();
    }
        else if (john_cena.isPlaying()){
            john_cena.seekTo(0);
    }  else{
       john_cena.start();
    }
}
});
© www.soinside.com 2019 - 2024. All rights reserved.