播放声音 - 安卓

播放声音 - 安卓

问题描述:


我希望我的应用程序中播放每当用户进行输入的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(); 

       } 
      }); 
     } 

}); }}

我可以安装和打开应用程序就好了,我可以输入一个字母,它播放声音,但按下了第二个字母的应用程序崩溃时。我不知道什么是错的。无论我做多少次,旋转我的设备都会播放声音。所以在旋转时它会再次播放声音。但是,然后按一个键,应用程序崩溃而没有播放声音。
有人可以帮助我得到这个权利?这将是非常赞赏:)

+0

尝试从崩溃添加一些logcat的输出。这对发现导致崩溃的原因至关重要。 – Klaus 2011-03-16 08:57:17

+0

感谢您的意见。我对编程相当陌生,我如何添加它? :) – 2011-03-16 11:45:16

+0

啊,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

(我是全新的Android开发,所以认为这个有趣弄清楚。)

我发现this有关调用release():“一旦MediaPlayer对象是在结束状态,它不能再使用,并且无法将它带回任何其他状态。“因此,非法状态的例外(我能够重现)。

正确的组合,而不是好像是叫stop()然后prepare()

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