Android Studio-媒体播放器在Genymotion上播放声音?

时间:2016-10-12 13:02:17

标签: android android-studio

我正在尝试构建一个小应用程序,当我们点击按钮时会发出声音。但我无法播放声音。不知道问题所在。请帮帮我。以下是代码。

 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。

2 个答案:

答案 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();即可。