2011-03-16 164 views
0


我希望我的應用程序中播放每當用戶進行輸入的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://stackoverflow.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

回答

0

(我是全新的Android開發,所以認爲這個有趣弄清楚。)

我發現this有關調用release():「一旦MediaPlayer對象是在結束狀態,它不能再使用,並且無法將它帶回任何其他狀態。「因此,非法狀態的例外(我能夠重現)。

正確的組合,而不是好像是叫stop()然後prepare()

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