我正在尝试构建一个小应用程序,当我们点击按钮时会发出声音。但我无法播放声音。不知道问题所在。请帮帮我。以下是代码。
public class MainActivity extends AppCompatActivity {
private Button button;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer = new MediaPlayer();
mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.song);
button = (Button)findViewById(R.id.mediaButtonId);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
}
});
}
}
注意:-Sorry家伙,我认为问题出在我的代码上,但应用程序在我的手机上运行得非常好,所以它与我的genymotion模拟器的问题。任何人都可以建议我的解决方案。通过方式,我使用的是Mac OSX。
答案 0 :(得分:1)
MediaPlayer有自己的生命周期。您不能只创建实例然后开始播放。首先,你必须准备它,然后播放它。
您可以同步或异步准备媒体播放器。
有些事情:
MediaPlayer mediaPlayer= new MediaPlayer();
mediaPlayer=MediaPlayer.create(getApplicationContext(),R.raw.song);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
mediaPlayer.prepareAsync();
或者,如果您想同步进行
MediaPlayer mediaPlayer= new MediaPlayer();
mediaPlayer=MediaPlayer.create(getApplicationContext(),R.raw.song);
try {
mediaPlayer.prepare();
} catch (IOException e){
}
mediaPlayer.start();
请确保在播放前准备好。
媒体播放器生命周期:https://developer.android.com/reference/android/media/MediaPlayer.html
答案 1 :(得分:0)
您需要确保媒体播放器已准备就绪才能播放,因此您需要设置onPreparedListener
为您处理此问题,如下所示:
MediaPlayer mp = new MediaPlayer();
mp = MediaPlayer.create(getApplicationContext(),R.raw.song);
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mp.start();
}
});
button = (Button)findViewById(R.id.mediaButtonId);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.prepareAsync();
}
});
从按下按钮到以这种方式播放的声音会有轻微的延迟。另一种方法可以是在媒体播放器准备好之前禁用按钮,然后在按下按钮时,只需在按钮启用时调用mp.start();
即可。