如何在Android游戏中全局打开/关闭声音

时间:2011-12-19 09:47:57

标签: android android-widget

我正在开发Android游戏,我正在提供选项菜单,以“打开”或“关闭”游戏的声音和振动。我有3个活动,我想要如果我关闭声音或从任何振动即使我将一个活动移动到另一个活动,我的游戏的活动也必须在所有其他活动中关闭。如果从任何一个活动我再次打开游戏的声音或振动,它必须在所有其他活动中打开游戏。基本问题是我无法做到这一点,我对此感到困惑。我也不确定我用哪种方法来做那件事。请帮帮我。 我有3个课程: 1)助手类(MySetting) 2)class1(主要班级) 3)2级

Class 1(我尝试的主要代码是)

if(MySetting.mp.isPlaying()==true){  
             ms.setSoundON(true);

         }  
         else {  
             ms.loadAudio(this); 
             MySetting.PlaySound();  
             ms.setSoundOFF(false);  
             ms.setSoundON(true);  
         }  
         Button ON=(Button)findViewById(R.id.Start); 
                  ON.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {  
                if(ms.isSoundON()==false){  
                    ms.loadAudio(Class1.this);  
                     MySetting.PlaySound();  
                     ms.setSoundOFF(false);  
                     ms.setSoundON(true);  
                     tv.setText("Sound is Start");  
                     }  
                 else {  

                     ms.setSoundON(true);  
                 } 

            }  

         });  
                  Button OFF=(Button)findViewById(R.id.stop);  
                  OFF.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {  
                MySetting.StopSound();  
                ms.setSoundOFF(true);  
                ms.setSoundON(false);  
                tv.setText("Sound is Stop");  
            }  

         });  
                  Button change=(Button)findViewById(R.id.changeActivity);  
                  change.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {  
                startActivity(new Intent(Class1.this,Class2.class));  

                    }  
                 });    

同样为CLASS2
HELPER CLASS CODE是:

static boolean SoundON,SoundOFF;  
static MediaPlayer mp=new MediaPlayer();  
    public void loadAudio(Context context){  
                mp=MediaPlayer.create(context,R.raw.fullmoon);  
}  
    public static void PlaySound(){  
            mp.start();  
            }  
    public boolean setSoundON(boolean on){  
        SoundON=on;  
        return SoundON;  
    }  
    public boolean setSoundOFF(boolean off){  
        SoundOFF=off;  
        return SoundOFF;  
    }  
    public boolean isSoundON(){  
        return SoundON;  
    }  
    public boolean isSoundOFF(){  
        return SoundOFF;  
    }  
    public static void StopSound(){  
        mp.stop();  
        mp.release();         
    }  

**现在我遇到的问题是当我从活动转移到另一个应用程序崩溃的时候PLZ帮助我并且我想要点击选项菜单时打开和关闭声音**
谢谢和问候 RizN81

1 个答案:

答案 0 :(得分:0)

我会选择能够管理您活动中所有声音的Singleton课程。我以前没有在Android中完成,但在C ++上,我在其他示例(herehere)中看到了实际上支持我的想法。

可以从应用程序的任何位置访问Singleton,更重要的是,每个应用程序只有一个实例,可以让您全局配置任何声音。

这些链接和我所说的是,拥有一个管理游戏中每个声音的课程将有助于您:

  1. 简化声音调用(您可以通过HashMap拨打YourSoundManager.getInstance().play("soundName");(例如)的所有声音,然后按YourSoundManager.getInstance().stop("soundName");停止,或者只是复制粘贴上面的示例通过facading来电和
  2. 来控制速度和声音。
  3. 控制任何声音,就像你有一个很大的调音台一样,除了使用除了代码之外的任何声音:)
  4. 从这些例子来看,这取决于你想要做什么来平息你的游戏。要么停止所有声音,要么降低音量。 我会先停止他们,因为这是最简单的方法。

    修改

    如果您想在从活动切换到另一个活动时停止声音,您仍然可以使用单例方法。

    您可以覆盖onResume()方法,以便播放您愿意使用的声音。通过查看可能包含任何播放声音的HashMap(或使用其他更熟悉的策略)来检查此声音是否未播放。我会给你写一些可能对你不起作用的代码(因为它取决于你的最终方法以及你如何处理声音)

    @Override
    public void onResume()
    {
        if(! SoundManager.getInstance().isPlaying("thisStageSound") ) //if it's already playing, do not stop it!
        {
            SoundManager.getInstance().stopAllSounds();
            SoundManager.getInstance().playSound("thisStageSound");
        }
        super.onResume();
    }