2011-06-14 3 views
1

Dans mon application de jeu JumbledWords, je fournis des options pour activer et désactiver les sons. Le problème est que je ne suis pas capable de faire cela. J'ai écrit le code pour ça mais ça ne marche pas.comment activer et désactiver le son par programmation dans android

SplashScreen.java

RadioButton rbSoundOn, rbSoundOff; 
JumbledWords jw = new JumbledWords(); 
@Override 
public void onCreate(Bundle bundle) 
{ 
    super.onCreate(bundle); 

    //set the full screen view of the activity 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.splash_screen); 

    rbSoundOn = (RadioButton)findViewById(R.id.optSoundOn); 
    rbSoundOff = (RadioButton)findViewById(R.id.optSoundOff); 

    if(rbSoundOn.isChecked() == true) 
    { 
     jw.setSoundOn(true); 
    } 
    else 
    { 
     jw.setSoundOn(false); 
    }} 

JumbledWords.java

static boolean soundOn; 
public void setSoundOn(boolean soundOn) 
{ 
    this.soundOn = soundOn; 
} 

public boolean isSoundOn() 
{ 
    return soundOn; 
} 

public void checkWord() 
{ 
    if(abcd.equalsIgnoreCase(etGuessedWord.getText().toString())) 
    { 
     WordLibrary.setMyInt(WordLibrary.getMyInt() + 10); 
     tvScore.setText(String.valueOf(WordLibrary.getMyInt())); 
     if(soundOn == true) 
     { 
     mp = MediaPlayer.create(this, R.raw.clap); 
     mp.start(); 

     mp.setOnCompletionListener(new OnCompletionListener(){ 

      @Override 
      public void onCompletion(MediaPlayer arg0) { 
       // TODO Auto-generated method stub 
       mp.release(); 
      } 

     }); 
     } 
    } 
    else 
    { 
     if(soundOn == true) 
     { 
     mp = MediaPlayer.create(this, R.raw.oop); 
     mp.start(); 

     mp.setOnCompletionListener(new OnCompletionListener(){ 

       @Override 
       public void onCompletion(MediaPlayer arg0) { 
        // TODO Auto-generated method stub 
        mp.release(); 
       } 

      }); 
     } 


    } 
} 

Mon problème est que si j'utilise l'option Désactiver, mes jeux sonores, qui ne doit pas se produire dans ce Cas. Aidez-moi, s'il vous plaît.

+0

Un problème potentiel pourrait être que vous devriez appellerez 'mp.setOnCompletionListener() '** avant **' mp.onStart() '. Il est possible que vous ne libérez pas correctement votre instance MediaPlayer. Je ne suis pas sûr si cela cause réellement votre problème, cependant. –

Répondre

0

ne sait pas où le problème pose, mais a trouvé des problèmes dans votre code: 1) Ne pas créer des objets lors de leur initialisation:

JumbledWords jw = new JumbledWords(); 

ne va pas. Vous devez initialiser la variable, puis appeler un constructeur dans onCreate d'activité:

JumbledWords jw; 

Et à l'intérieur onCreate():

jw = new JumbledWords(); 

2) Si soundOn est déclarée comme statique, chaque méthode utilisant cette variable devrait également être statique . Et vous devez appeler ces méthodes de manière statique:

JumbledWords.setSoundOn(true); 

Essayez résolution de ces problèmes, et peut-être vous résoudre votre problème. Bonne chance!

3

Vous n'êtes pas réellement en contact change à vos boutons radio.

Vous devez définir le contrôle RadioGroup qui enveloppe vos contrôles RadioButton et définit le "groupe" de boutons radio; puis appelez setOnCheckedChangeListener() sur votre RadioGroup pour définir un Listener qui sera appelé lorsque l'état change. Il est dans ce Listener que vous devez vérifier l'état des boutons individuels et appeler jw.setSoundOn(); plutôt que de le faire dans votre méthode onCreate():

public void onCreate(Bundle bundle) 
{ 
    super.onCreate(bundle); 

    //set the full screen view of the activity 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.splash_screen); 
    RadioGroup group = (RadioGroup)findViewById(R.id.optSoundGroup); 
    final RadioButton rbSoundOn = (RadioButton)findViewById(R.id.optSoundOn); 
    final RadioButton rbSoundOff = (RadioButton)findViewById(R.id.optSoundOff); 
    group.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @Override 
     void onCheckedChanged(RadioGroup group, int checkedId) 
     { 
      if(rbSoundOn.isChecked() == true) 
      { 
       jw.setSoundOn(true); 
      } 
      else 
      { 
       jw.setSoundOn(false); 
      } 
     } 
    }); 
} 
Questions connexes