我有两个屏幕Main.java
和Home.java
。 Main.java
点击按钮进行用户登录。
用户点击Main.java
中的登录按钮后,连续发生的事情是什么:
Home.java
在Home.java
onCreate(Bundle)
中,我创建了一个新的线程来播放背景声音:
// Media Player
Runnable backgroundSound = new Runnable() {
@Override
public void run() {
MediaPlayer mediaPlayer1= MediaPlayer.create(Home.this, R.raw.welcome_message);
mediaPlayer1.start();
MediaPlayer mediaPlayer2= MediaPlayer.create(Home.this, R.raw.welcome_tone);
mediaPlayer2.start();
}
};
Thread media = new Thread(backgroundSound);
media.start();
// Media Player
但是,如果按回按钮,此声音继续播放。即使我退出应用程序,这个声音继续播放。我应该怎么做,如果屏幕被更改(后退按钮,退出应用程序或其他应用程序,发生电话事件的中间按钮),此声音应该停止。
知道这是线程media.stop
可能不是一个好选择。由于suspend()
和stop()
都已弃用,我该怎么办?中断这个帖子?或者是其他东西?什么应该在更换屏幕时阻止这个帖子(我在上面讨论过)
注意:我没有粘贴过多的源代码(所有java文件)。我认为可能没有必要在这里提供所有不需要的内容。如果缺少任何详细信息,请告诉我我将编辑问题。
答案 0 :(得分:2)
首先给你的媒体播放器对象提供静态媒体播放器引用。然后在你的activity.in中实现onBackPressed(),在下面提供代码。
if(mediaPlayer1.isPlaying())
mediaPlayer1.stop();
if(mediaPlayer2.isPlaying())
mediaPlayer2.stop();
完整的代码将是这样的
public class Home extends Activity {
public static MediaPlayer mediaPlayer1,mediaPlayer2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Media Player
Runnable backgroundSound = new Runnable() {
@Override
public void run() {
mediaPlayer1= MediaPlayer.create(Home.this, R.raw.welcome_message);
mediaPlayer1.start();
mediaPlayer2= MediaPlayer.create(Home.this, R.raw.welcome_tone);
mediaPlayer2.start();
}
};
Thread media = new Thread(backgroundSound);
media.start();
// Media Player
}
@Override
public void onBackPressed()
{
if(mediaPlayer1.isPlaying())
mediaPlayer1.stop();
if(mediaPlayer2.isPlaying())
mediaPlayer2.stop();
super.onBackPressed();
}
}
答案 1 :(得分:-2)
您可以使用活动生命周期。就像在暂停时你停止媒体播放器。在恢复时你再次播放它。 您还可以覆盖活动内的onbackpressed功能。单击后退,即可停止播放音乐。
@Override public void onBackPressed() { // TODO stop the music super.onBackPressed(); }