воспроизводить звук при изменении EditText - Android - PullRequest
0 голосов
/ 16 марта 2011


я хочу, чтобы мое приложение воспроизводило звук всякий раз, когда пользователь вводит поле EditText. Надеемся, что это создаст иллюзию, что клавиатура издает звук при каждом нажатии клавиши.

Мой код для этого конкретного события выглядит так:

package com.textField.android;

открытый класс textField extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final EditText edittext = (EditText) findViewById(R.id.edittext);

    final MediaPlayer mp = MediaPlayer.create(getBaseContext(),
            R.raw.pistol);


   edittext.addTextChangedListener(new TextWatcher() { 
        public void afterTextChanged(Editable s) { 

        } 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

        } 
        public void onTextChanged(CharSequence s, int start, int before, int count) { 

            mp.start();
            mp.setOnCompletionListener(new OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.release();

                }
            }); 
        } 

}); } } * +1010 *

Я могу нормально установить и открыть приложение, и я могу ввести ОДНУ букву, и он воспроизводит звук, но при нажатии второй буквы приложение вылетает. Я не знаю что не так. Вращение моего устройства воспроизводит звук также независимо от того, сколько раз я делаю это. Так что при вращении назад он воспроизводит звук снова. Но затем при нажатии клавиши приложение вылетает БЕЗ воспроизведения звука.
Может ли кто-нибудь помочь мне сделать это правильно? Это было бы очень высоко ценится:)

1 Ответ

0 голосов
/ 20 апреля 2011

(Я новичок в разработке под Android, поэтому подумал, что это интересно выяснить.)

Я обнаружил это о вызове release(): «Как только объект MediaPlayer находится в состоянии« Конец », он больше не может использоваться, и нет способа вернуть его в любое другое состояние». Отсюда и нелегальное государственное исключение (которое я смог воспроизвести).

Вместо этого правильная комбинация выглядит как вызов stop(), а затем prepare():

public void onCompletion(MediaPlayer mp) {
    mp.stop();
    try
    {
        mp.prepare();
    }
    catch( IOException ie )
    {
        throw new RuntimeException( ie ) ;
    }
}
...