我希望我的应用程序在用户输入 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/