android - 更改 EditText 时播放声音 - android

标签 android audio android-edittext onchange playback

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

我的这个特定事件的代码如下所示:

package com.textField.android;

公共(public)类 textField 扩展 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();

                }
            }); 
        } 

});
}
}

我可以很好地安装和打开应用程序,我可以输入一个字母并播放声音,但是当按下第二个字母时应用程序崩溃。我不知道怎么了。无论我做了多少次,旋转我的设备都会播放声音。因此,当旋转回来时,它会再次播放声音。但是然后按下一个键,应用程序在不播放声音的情况下崩溃。
有人可以帮我解决这个问题吗?那将不胜感激:)

最佳答案

(我是 Android 开发的新手,所以觉得这很有趣。)

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

相反,正确的组合似乎是调用 stop()然后 prepare() :

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

关于android - 更改 EditText 时播放声音 - android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5322817/

相关文章:

Java - MP3 解码并将其存储到字节数组

ios - AVAudioRecorder最小的音频类型是什么

html - 加载网页时发出 2 声或更多短声

android EditText 融入背景

java - 应用程序在新设备 (lollipop) 上显示错误,但在我的旧设备 (kitkat) 上运行正常

java - 在对话框内的 editText 中隐藏键盘

android - 在一段时间未打开应用程序时按下按钮,Android应用程序会崩溃吗?

java - 后台线程完成后返回 Android Activity

Android - 自定义对话框 - 无法从 EditText 获取文本

android - EditText 在 ListView 中滚动时丢失内容