【问题标题】:Detect music finished playing检测音乐播放完毕
【发布时间】:2017-08-27 00:58:55
【问题描述】:

我有音乐可以通过

AssetFileDescriptor assetDescriptor = getAssets().openFd(filename);
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(), assetDescriptor.getStartOffset(), assetDescriptor.getLength());
mediaPlayer.prepareAsync();
mediaPlayer.setVolume(1, 1);
mediaPlayer.start();

我应该如何检测这首音乐是否停止播放,以便我可以开始播放下一首?

我尝试过不断检查(每秒一次),通过

((AudioManager) application.getSystemService(Context.AUDIO_SERVICE)).isMusicActive();

但这似乎不起作用(总是返回 true)。有没有其他方法可以通知我音乐停止播放,以便我可以开始下一首?

【问题讨论】:

    标签: java android android-audiomanager android-music-player


    【解决方案1】:

    使用MediaPlayer.onCompletionListener 在曲目结束时收听事件。下一个音频文件将在此之后播放。一个例子

    player.prepare();
    player.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer player) {
            player.stop();
            // next audio file
        }
     });
     player.start();
    

    另外一个建议,要一个接一个地播放多个音频,您不必创建嵌套的 onCompletionListener。而是使用下面的代码。

    int[] myAudio = {R.raw.audio1, R.raw.audio2, R.raw.audio3};
    int mTrackFinish = 0;
    MediaPlayer mp = MediaPlayer.create(this, myAudio[0]);
    mp.setOnCompletionListener(new OnCompletionListener() 
    {
    @Override
    public void onCompletion(MediaPlayer mp)
    {
     mTrackFinish++;
     mp.reset();
     if(mTrackFinish < myAudio.length)
            // play some audio from list
        else
          mTrackFinish=0;
          mp.release();
          mp = null;  // either set counter to 0 and start again or call end of list
    
    }
    });
    mp.start();
    

    【讨论】:

      【解决方案2】:

      MediaPlayer 有一个名为setOnCompletionListener 的方法,它执行以下操作:

      注册一个回调,以便在播放期间到达媒体源末尾时调用。

      欲了解更多信息:https://developer.android.com/reference/android/media/MediaPlayer.html#setOnCompletionListener%28android.media.MediaPlayer.OnCompletionListener%29

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 2014-07-04
        相关资源
        最近更新 更多