更改屏幕后停止MediaPlayer

时间:2015-08-20 17:55:15

标签: java android multithreading audio

我有两个屏幕Main.javaHome.javaMain.java点击按钮进行用户登录。

用户点击Main.java中的登录按钮后,连续发生的事情是什么:

  1. 按钮声音播放。
  2. 凭据与Microsoft SQL Server的数据库
  3. 匹配
  4. 启动新的Intent Home.java
  5. 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文件)。我认为可能没有必要在这里提供所有不需要的内容。如果缺少任何详细信息,请告诉我我将编辑问题。

2 个答案:

答案 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();       
   }