目前我只有两个按钮和两首歌曲。如果我单击第一个按钮,则播放第一个声音。但是,如果我在第一个声音播放时单击第二个按钮,则第二个声音开始播放两个。我该如何阻止其他声音?目前我正在使用此代码:
'\a'
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
如果您有多个音频文件,我认为一个简单的解决方案是为播放音频文件而创建的每个按钮分配一个标签。使用标签使启动和停止按钮更加容易。使用标签时,应将标签设置为与文件名相同。完成此操作后,即可使用以下实际代码:
public void play(View view){
buttonPressed = (Button) view;
mp = MediaPlayer.create(this, getResources().getIdentifier(buttonPressed.getTag().toString(), "raw", getPackageName()));
mp.start();
}
不支持-在代码的开头分配媒体播放器,这样以后您可以更轻松地调用它。例如:
MediaPlayer mp;
要停止播放文件,请尝试以下操作:
public void stop(View view){
if(mp.isPlaying()){
mp.stop();
}
}
我只有14岁,不久前我才刚刚开始学习Java,但是到目前为止,我已经知道了,我认为我的代码应该可以轻松解决您的问题。
答案 2 :(得分: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();
}
}
});