从两个不同的按钮播放两个不同的声音文件?

时间:2012-07-16 15:03:54

标签: java android file audio button

我试过在很多地方寻找这个,但找不到答案。我正在制作一个带有一组图像按钮的应用程序,这些按钮上有字母。我希望能够单击字母A,然后听到声音文件A.如果我单击字母B,我想听到声音文件B.到目前为止,我只有字母A和B,以及声音文件A和B.当我运行我的代码,我只能听到按钮A的声音,当我按下字母B时,没有任何事情发生。这是我的代码:

    package com.android.nishad.learn.hindi;

    import android.app.Activity;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;

    public class AlphabetActivity extends Activity implements OnClickListener {
       /** Called when the activity is first created. */
       MediaPlayer mp;

       @Override
       public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_alphabet);

          ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);
          btn.setOnClickListener(this);

       }

       public void onClick(View v) {
          // TODO Auto-generated method stub

          mp = MediaPlayer.create(this, R.raw.lettera);
          mp.start();
          while (mp.isPlaying()) { 
             // do nothing 
          };
          mp.release();
       }



       public void onCreate1(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_alphabet);

          ImageButton btn2 = (ImageButton)findViewById(R.id.imageButton2);
          btn2.setOnClickListener(this);

       }

       public void onClick1(View v) {
          // TODO Auto-generated method stub

          mp = MediaPlayer.create(this, R.raw.letterb);
          mp.start();
          while (mp.isPlaying()) { 
             // do nothing 
          };
          mp.release();
       }
    };

4 个答案:

答案 0 :(得分:2)

方法onCreate1onClick1无用,因为它们永远不会被调用。相反,您应该将所有初始化代码放在onCreate方法中:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alphabet);

    findViewById(R.id.imageButton1).setOnClickListener(this);
    findViewById(R.id.imageButton2).setOnClickListener(this);

}

public void onClick(View v) {

    // TODO Auto-generated method stub
    int rawid = 0;
    switch(v.getId()) {
        case R.id.imageButton1: rawid = R.raw.lettera; break;
        case R.id.imageButton2: rawid = R.raw.letterb; break;

        defalt: return;    //do nothing if none of our buttons;
    }

    mp = MediaPlayer.create(this, rawid);
    mp.start();
    while (mp.isPlaying()) { 
        // do nothing 
    };
   mp.release();
}

但请注意,这是一种非常低效的处理方式。相反,您应该有一个MediaPlayer实例,然后根据需要使用它来播放各种声音。每次按下按钮时创建一个新的MediaPlayer都是浪费资源。

答案 1 :(得分:0)

试试这个:

 public void onClick(View v) {

  switch(v.getId()){

  case R.id.R.id.imageButton1:
          mp = MediaPlayer.create(this, R.raw.lettera);
          break;

  case R.id.R.id.imageButton2:
          mp = MediaPlayer.create(this, R.raw.letterb);
          break;
  }
          mp.start();
          while (mp.isPlaying()) { 
             // do nothing 
          };
          mp.release();
}

答案 2 :(得分:0)

package com.android.nishad.learn.hindi;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class AlphabetActivity extends Activity implements OnClickListener {
   /** Called when the activity is first created. */
   MediaPlayer mp;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_alphabet);

      ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);
      btn.setOnClickListener(this);

      ImageButton btn2 = (ImageButton)findViewById(R.id.imageButton2);
      btn2.setOnClickListener(this);

   }

   public void onClick(View v) 
   {
       switch(v.getId()) 
       {
         case R.id.imageButton1:
             mp = MediaPlayer.create(this, R.raw.lettera);
             break;
         case R.id.imageButton2:
             mp = MediaPlayer.create(this, R.raw.letterb);
             break;
         default:
             return;
       }

      mp.start();
      while (mp.isPlaying()) { 
         // do nothing 
      }
      mp.release();
   }
}

答案 3 :(得分:0)

首先,删除那些onCreate1()onClick1()方法。 onClick()方法足以接收布局中所有按钮的点击事件。您可以使用view.getId()方法执行此操作。为了播放声音,我建议使用SoundPool类,它具有非常清晰的界面用于此类目的。希望这会有所帮助。