Android MediaPlayer 不会通过单击备用按钮停止
Android MediaPlayer not stopping by clicking alternate button
我有一个带有很多声音的 MediaPlayer。这是我在 Google Play 商店中的应用程序:https://play.google.com/store/apps/details?id=de.logtainment.ungesoundboard。注意:该应用程序是德语的。当您单击两个按钮时,您会听到两种声音。如何停止第一个声音并播放第二个声音,或者当我播放第一个声音时,第二个声音停止?我怎样才能创建这个?这是我的媒体播放器代码:
public class SoundsZweiActivity extends ActionBarActivity {
Toolbar toolbar;
MediaPlayer runtergeholt;
//This is When I click on The button
public void runtergeholt(View paramView) {
this.runtergeholt.start();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sounds_zwei);
//MediaPlayer
this.runtergeholt = MediaPlayer.create(this, R.raw.runtergeholt);
//Toolbar
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
希望社区帮助我!
您可以在启动 Mediaplayer runtergeholt 后简单地执行此操作
firstmediaplayer.stop();
。
我会添加一个 OnCompletionListener
,也在这里停止并释放播放器:
runtergeholt.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer player) {
player.stop();
player.release();
...
}
注意:释放播放器很重要,来自documentation:”...应该调用此方法来释放MediaPlayer对象,除非应用程序有特殊需要保留对象。 ...,如果不再需要 MediaPlayer 对象,则未能立即调用此方法也可能导致移动设备持续电池消耗,以及其他应用程序播放失败如果设备不支持同一编解码器的多个实例。"
我已经下载了你的应用程序,并快速实现了我将如何使用 3 个按钮来实现它,因为我注意到你的英语不好,我还用德语评论了重要部分:
编辑:感谢@Trinimon,这里有一个更简洁的解决方案,只有一个 MediaPlayer:
// implement View.OnClickListener :
public class SoundZweiActivity extends ActionBarActivity implements View.OnClickListener {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sounds_zwei);
createButtons();
}
private void createButtons() {
// put your Buttons in an Array and set OnClickListener on all
Button[] buttons = new Button[]{
(Button) findViewById(R.id.btn_runtergeholt),
(Button) findViewById(R.id.btn_kranke_lache),
(Button) findViewById(R.id.btn_missgeburt),
// etc ...
};
for (Button button : buttons)
button.setOnClickListener(this);
}
private void createMediaPlayer(int id) {
// Here the MediaPlayer is killed and a new one created, I dont call .stop() and then
// .start() again because it often crashes when the mediaPlayer is not prepared yet,
// for example when clicking different Buttons really fast
// Hier wird der MediaPlayer zerstört
// und ein neuer erschaffen, wenn man .stop() und wieder .start() ruft kommt es vor dass
// der MediaPlayer noch nicht bereit ist, falls man z.B. ganz schnell
// hintereinander verschiedene Tasten drückt stürzt er oft ab
if (mediaPlayer != null)
mediaPlayer.release();
mediaPlayer = MediaPlayer.create(this, id);
mediaPlayer.start();
}
@Override
public void onClick(View v) {
// Determine which button is clicked and play its sound
// Hier wird gecheckt welcher Knopf gedrückt wurde und der dazugehörige Sound gespielt
switch (v.getId()) {
case R.id.btn_runtergeholt:
createMediaPlayer(R.raw.runtergeholt); // plays first sound (runtergeholt)
break;
case R.id.btn_kranke_lache:
createMediaPlayer(R.raw.kranke_lache); // plays second sound (kranke_lache)
break;
case R.id.btn_missgeburt:
createMediaPlayer(R.raw.missgeburt);// plays third sound (missgeburt)
break;
// etc ...
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// kill mediaPlayer
if (mediaPlayer != null)
mediaPlayer.release();
}
}
我有一个带有很多声音的 MediaPlayer。这是我在 Google Play 商店中的应用程序:https://play.google.com/store/apps/details?id=de.logtainment.ungesoundboard。注意:该应用程序是德语的。当您单击两个按钮时,您会听到两种声音。如何停止第一个声音并播放第二个声音,或者当我播放第一个声音时,第二个声音停止?我怎样才能创建这个?这是我的媒体播放器代码:
public class SoundsZweiActivity extends ActionBarActivity {
Toolbar toolbar;
MediaPlayer runtergeholt;
//This is When I click on The button
public void runtergeholt(View paramView) {
this.runtergeholt.start();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sounds_zwei);
//MediaPlayer
this.runtergeholt = MediaPlayer.create(this, R.raw.runtergeholt);
//Toolbar
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
希望社区帮助我!
您可以在启动 Mediaplayer runtergeholt 后简单地执行此操作firstmediaplayer.stop();
。
我会添加一个 OnCompletionListener
,也在这里停止并释放播放器:
runtergeholt.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer player) {
player.stop();
player.release();
...
}
注意:释放播放器很重要,来自documentation:”...应该调用此方法来释放MediaPlayer对象,除非应用程序有特殊需要保留对象。 ...,如果不再需要 MediaPlayer 对象,则未能立即调用此方法也可能导致移动设备持续电池消耗,以及其他应用程序播放失败如果设备不支持同一编解码器的多个实例。"
我已经下载了你的应用程序,并快速实现了我将如何使用 3 个按钮来实现它,因为我注意到你的英语不好,我还用德语评论了重要部分:
编辑:感谢@Trinimon,这里有一个更简洁的解决方案,只有一个 MediaPlayer:
// implement View.OnClickListener :
public class SoundZweiActivity extends ActionBarActivity implements View.OnClickListener {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sounds_zwei);
createButtons();
}
private void createButtons() {
// put your Buttons in an Array and set OnClickListener on all
Button[] buttons = new Button[]{
(Button) findViewById(R.id.btn_runtergeholt),
(Button) findViewById(R.id.btn_kranke_lache),
(Button) findViewById(R.id.btn_missgeburt),
// etc ...
};
for (Button button : buttons)
button.setOnClickListener(this);
}
private void createMediaPlayer(int id) {
// Here the MediaPlayer is killed and a new one created, I dont call .stop() and then
// .start() again because it often crashes when the mediaPlayer is not prepared yet,
// for example when clicking different Buttons really fast
// Hier wird der MediaPlayer zerstört
// und ein neuer erschaffen, wenn man .stop() und wieder .start() ruft kommt es vor dass
// der MediaPlayer noch nicht bereit ist, falls man z.B. ganz schnell
// hintereinander verschiedene Tasten drückt stürzt er oft ab
if (mediaPlayer != null)
mediaPlayer.release();
mediaPlayer = MediaPlayer.create(this, id);
mediaPlayer.start();
}
@Override
public void onClick(View v) {
// Determine which button is clicked and play its sound
// Hier wird gecheckt welcher Knopf gedrückt wurde und der dazugehörige Sound gespielt
switch (v.getId()) {
case R.id.btn_runtergeholt:
createMediaPlayer(R.raw.runtergeholt); // plays first sound (runtergeholt)
break;
case R.id.btn_kranke_lache:
createMediaPlayer(R.raw.kranke_lache); // plays second sound (kranke_lache)
break;
case R.id.btn_missgeburt:
createMediaPlayer(R.raw.missgeburt);// plays third sound (missgeburt)
break;
// etc ...
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// kill mediaPlayer
if (mediaPlayer != null)
mediaPlayer.release();
}
}