改变EditText时播放声音 - android

时间:2011-03-16 08:44:23

标签: android audio android-edittext onchange playback


我希望我的应用程序在用户输入EditText字段时播放声音。希望这会产生一种错觉,即只要按下按键,键盘就会发出声音。

此特定事件的代码如下所示:

package com.textField.android;

public class 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();

                }
            }); 
        } 

});     } }

我可以正常安装和打开应用程序,我可以输入一个字母然后播放声音,但是当按下第二个字母时,应用程序崩溃了。我不知道出了什么问题。无论我做多少次,旋转我的设备都会播放声音。因此,当向后旋转时,它会再次播放声音。但是按下一个键,应用程序崩溃而不播放声音 有人可以帮助我做到这一点吗?非常感谢:)

1 个答案:

答案 0 :(得分:0)

(我对Android开发来说是全新的,所以想想这很有意思。)

我发现this有关调用release()的信息:“一旦MediaPlayer对象处于End状态,就无法再使用它,也无法将其恢复到任何其他状态。”因此非法状态异常(我能够重现)。

正确的组合似乎是拨打stop()然后prepare()

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