java - 通过两个不同的按钮播放两个不同的声音文件?

标签 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();
       }
    };

最佳答案

方法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 是一种资源浪费。

关于java - 通过两个不同的按钮播放两个不同的声音文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507062/

相关文章:

java.time 未使用 jackson 正确反序列化

java - 编辑 TableColumn 时出现 ClassCastException

android - POST 请求通过 HTTPs 与 Android

java - Android - AlertDialog 中的字符串值在访问时不断重置

c++ - 无法在C++ Windows上打开.txt文件

java - 如何在J2ME中播放内存卡中文件中的.mp3歌曲

java - 使用方法将数据添加到父类(super class)和数组

java - 检测Android上的软导航栏并隐藏导航栏

c - 将二进制文件读入结构变量,出现段错误

c - 如何使用 FILE 作为 C 函数的参数?