android代码在设备上的行为与模拟器不同

时间:2016-11-01 17:07:18

标签: android

嗨,我开发了一个简单的应用程序,如果布尔值为真,则播放声音,然后在完成时播放另一个声音,或者如果布尔值为假则播放第二个声音,并且它在avd上完美运行但在设备上运行时它不会让第一个声音在跳到第二个

之前完成

这是在onCreate

setContentView(screen);//pl
if(msg==true) {//boolean set from other activity
    playInfo();
}else if(msg==false){
    playSound();
  }
}

这是开始播放的播放信息方法,但是在一秒之后它跳到了手机上的playound方法,但在avd上完美运行

private void playInfo(){
    mp = MediaPlayer.create(this, R.raw.msg);
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mp.start();
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            msg = false;
            playSound();
        }
    });
}

这是playound方法

 private void playSound() {
        mp = MediaPlayer.create(this, song);
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mp.start();
        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                playSound();//loop the sound
            }
        });
    }

这再次在模拟器上运行完美,但在设备上没有,为什么它们会采取不同的行为以及如何解决它的任何想法?

1 个答案:

答案 0 :(得分:0)

活动在设备上设置为横向模式,这导致活动在启动后非常快速地重绘,因此它开始被破坏并再次启动,布尔值设置为false但是在模拟器上这不会发生它只是绘制了一旦处于横向模式,活动就会通过使用2个不同的媒体播放器来解决问题,而只是播放第一个短音而不是重写代码。