2011-06-08 155 views
2

我正在创建一个根据成功或失败播放两种声音的争夺文字游戏应用程序。在猜测成功的情况下,游戏播放一个声音文件。在猜测失败时,游戏播放另一个声音文件。我写了下面的代码如何在Android中播放声音

public void checkWord() 
{ 
    MediaPlayer mp; 
    if(abcd.equals(etGuessedWord.getText().toString())) 
    { 
     WordLibrary.setMyInt(WordLibrary.getMyInt() + 10); 
     tvScore.setText(String.valueOf(WordLibrary.getMyInt())); 

     new AlertDialog.Builder(JumbledWords.this).setMessage("Awesome!!!") 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 
      wordIdx = (wordIdx + 1) % getSize(); 
      sWord = getScrambledWord(word_list[wordIdx]); 
      tvScrambledWord.setText(sWord); 
      abcd = word_list[wordIdx]; 
      ++word_array_length; 
      etGuessedWord.setText(""); 

      if(word_array_length >= word_list.length) 
      { 
       new AlertDialog.Builder(JumbledWords.this).setMessage("Level Complete!!! ") 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
        start = 0; 
        finish();   
       } 
       }).create().show();  
      } 


     } 
     }).create().show(); 
     **mp = MediaPlayer.create(this, R.raw.clap);** 
     mp.start(); 

    } 
    else 
    { 

     new AlertDialog.Builder(JumbledWords.this).setMessage("Wrong. Try Again") 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 

      etGuessedWord.setText(""); 
     } 
     }).create().show(); 
     **mp = MediaPlayer.create(this, R.raw.oop);** 
     mp.start(); 
    } 
} 

代码mp = MediaPlayer.create(this,R.raw.oop)给出异常。我尽我所能避免了异常,如IOException。应用程序暂停并给出“强制关闭”。代码有什么问题?有没有其他的编程方式来加载声音?请帮帮我。

回答

2

我通常使用SoundPool播放声音,这对我来说更舒服。你可以查看这个链接:Sound Pool

祝你好运!

0

确保您尝试播放的声音文件具有适当的扩展名(例如clap.wav)。

+0

声音文件位于res/raw文件夹中。这是通过R.raw.clap确定的 – 2011-06-08 14:53:58

+1

我的意思是文件名应该是'clap.wav',而不仅仅是'clap'(当然假设它是wav格式的)。 – 2011-06-08 14:57:05

3

问题是用于创建对象的上下文,“this”是活动上下文,并且在某些情况下,不包含对原始对象的引用。我遇到了使用应用程序上下文而不是活动上下文解决的相同问题。

试着改变你创建代码以下:

语境appContext = getApplicationContext();

mp = MediaPlayer.create(appContext,resid);