在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类