как играть звук в андроид - PullRequest
2 голосов
/ 08 июня 2011

Я создаю приложение для игры в слова-схватку, которое воспроизводит два звука в зависимости от успеха или неудачи.В случае удачи, игра воспроизводит один звуковой файл.При сбое догадки игра воспроизводит другой звуковой файл.Я написал следующий код

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.Приложение останавливается между ними и выдает «Force Close».Что не так с кодом?Есть ли другой способ программирования для загрузки звука?Пожалуйста, помогите мне.

Ответы [ 3 ]

3 голосов
/ 08 июня 2011

Проблема в том, что вы используете контекст для создания объекта, «this» - это контекст действия, который при определенных условиях не содержит ссылок на необработанные объекты.У меня была та же проблема, которую я решил, используя контекст приложения вместо контекста активности.

Попробуйте изменить код создания на следующий:

Context appContext = getApplicationContext ();

mp = MediaPlayer.create (appContext, остаток);

2 голосов
/ 08 июня 2011

Я обычно использую SoundPool для воспроизведения звуков, мне удобнее.Вы можете проверить эту ссылку: Sound Pool

Удачи!

0 голосов
/ 08 июня 2011

Убедитесь, что звуковой файл, который вы пытаетесь воспроизвести, имеет правильное расширение (например, clap.wav).

...