在button上单击android播放声音

点击时如何获得button以播放原始声音? 我刚刚创build了一个id为button1的button,但是无论写什么代码,都是错误的。

 import android.media.MediaPlayer; public class BasicScreenActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_basic_screen); } Button one = (Button)this.findViewById(R.id.button1); MediaPlayer = mp; mp = MediaPlayer.create(this, R.raw.soho); zero.setOnCliclListener(new View.OnClickListener() ) @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.basic_screen, menu); return true; } } 

这是原始文章中提供的代码中最重要的部分。

 Button one = (Button) this.findViewById(R.id.button1); final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); one.setOnClickListener(new OnClickListener(){ public void onClick(View v) { mp.start(); } }); 

逐步解释:

 Button one = (Button) this.findViewById(R.id.button1); 

首先是用于播放声音的button的初始化。 我们使用Activity的findViewById ,传递给它的Id(在这个例子中是R.id.button1 ),得到我们需要的button。 我们将它转​​换为Button以便将其分配给我们正在初始化的variables。 更多地解释这是如何工作的超出了这个答案的范围。 这就简要介绍了它是如何工作的。

 final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); 

这是如何初始化MediaPlayer 。 MediaPlayer遵循静态工厂方法devise模式 。 为了得到一个实例,我们调用它的create()方法,并把它传递给我们想要播放的声音的上下文和资源ID,在这个例子中, R.raw.soho 。 我们宣布它是final 。 Jon Skeet在这里为我们提供了一个很好的解释。

 one.setOnClickListener(new OnClickListener(){ public void onClick(View v) { //code } }); 

最后,我们设置我们以前初始化的button将会执行的操作。 点击button播放声音! 为此,我们将OnClickListener设置为我们的buttonone 。 里面只有一个方法, onClick()包含button应该做什么说明点击

 public void onClick(View v) { mp.start(); } 

要播放声音,我们调用MediaPlayer的start()方法。 该方法开始播放声音。

在那里,你现在可以在Android的button点击播放声音!


原始post

第一。 你应该把你的语句放在一个块里面,在这个例子中是onCreate方法。

第二。 您将button初始化为variables1 ,然后使用variables并将onClickListener设置为不完整的onClickListener。 使用setOnClickListener的variables。

第三,把逻辑放在onClick里面播放声音。

综上所述:

 import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class BasicScreenActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_basic_screen); Button one = (Button)this.findViewById(R.id.button1); final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho); one.setOnClickListener(new OnClickListener(){ public void onClick(View v) { mp.start(); } }); } } 

testing和工作100%

 public class MainActivity extends ActionBarActivity { Context context = this; MediaPlayer mp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); mp = MediaPlayer.create(context, R.raw.sound); final Button b = (Button) findViewById(R.id.Button); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { if (mp.isPlaying()) { mp.stop(); mp.release(); mp = MediaPlayer.create(context, R.raw.sound); } mp.start(); } catch(Exception e) { e.printStackTrace(); } } }); } } 

这就是我们所要做的

 if (mp.isPlaying()) { mp.stop(); mp.release(); mp = MediaPlayer.create(context, R.raw.sound); } 

最好的方法是在LogCat中search一个问题之后find的

  MediaPlayer mp; mp = MediaPlayer.create(context, R.raw.sound_one); mp.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub mp.reset(); mp.release(); mp=null; } }); mp.start(); 

释放媒体播放器给你在LogCat中的这个错误:

Android:MediaPlayer未经发布而定稿

重置媒体播放器给你在LogCat中的这个错误:

 Android: mediaplayer went away with unhandled events 

所以玩安全和简单的代码来使用媒体播放器。

要播放比同一个Activity / Fragment中的一个声音更简单的改变resID,同时创build新的媒体播放器

 mp = MediaPlayer.create(context, R.raw.sound_two); 

并发挥它!

玩的开心!

  import android.media.MediaPlayer; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { MediaPlayer mp; Button one ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mp = MediaPlayer.create(this, R.raw.soho); one = (Button)this.findViewById(R.id.button1); one.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mp.start(); } }); } } 

看一下android.media.ToneGenerator的ToneGenerator类