Reputation: 301
I am creating a scramble word game application which plays two sounds depending on the success or failure. On the success of the guess, the game plays one sound file. On the failure of the guess, the game plays another sound file. I 've written the following code
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();
}
}
The code mp = MediaPlayer.create(this,R.raw.oop) gives exception. I have done my my best to avoid exception such as IOException. The application halts in between and gives a "Force Close". What is wrong with the code? Is there any other way of programming to load the sound? Please help me.
Upvotes: 2
Views: 4604
Reputation: 326
The problem is the context you are using to create the object, "this" is an activity context and under certain conditions, does not contain references to raw objects. I had the same problem which I solved by using the application context instead of the activity context.
Try changing your create code to the following:
Context appContext = getApplicationContext();
mp = MediaPlayer.create(appContext, resid);
Upvotes: 4
Reputation: 13960
Make sure the sound file you're trying to play has the proper extension (e.g. clap.wav
).
Upvotes: 0
Reputation: 40203
I'm usually using SoundPool
for playing sounds, it's more comfortable for me. You can check this link: Sound Pool
Good luck!
Upvotes: 2