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