播放声音 - 安卓
问题描述:
我希望我的应用程序中播放每当用户进行输入的EditText领域的声音。希望这会产生一种错觉,即只要按下按键,键盘就会发出声音。播放声音 - 安卓
我给此特定事件代码lookes这样的:
package com.textField.android;
公共类的TextField延伸活动{
@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对象是在结束状态,它不能再使用,并且无法将它带回任何其他状态。“因此,非法状态的例外(我能够重现)。
正确的组合,而不是好像是叫stop()
然后prepare()
:
public void onCompletion(MediaPlayer mp) {
mp.stop();
try
{
mp.prepare();
}
catch(IOException ie)
{
throw new RuntimeException(ie) ;
}
}
尝试从崩溃添加一些logcat的输出。这对发现导致崩溃的原因至关重要。 – Klaus 2011-03-16 08:57:17
感谢您的意见。我对编程相当陌生,我如何添加它? :) – 2011-03-16 11:45:16
啊,LogCat太重要了!它会列出你得到的例外,导致你的崩溃。 http://*.com/questions/3280051/how-to-enable-logcat-in-eclipse内容涵盖启用logcat的。然后,你可以检查logcat的窗口,当你崩溃 - 它甚至可以让你通过E(异常或错误,不知道)过滤器。有人可能可以在没有LogCat输出的情况下找出这个问题,但是无论如何你都会希望将其设置为以后使用。 http://developer.android.com/reference/android/util/Log.html也值得一试。 – Klaus 2011-03-16 11:49:37