Android 如何找到音轨已完成/停止播放?

Android 如何找到音轨已完成/停止播放?,android,playback,audiotrack,Android,Playback,Audiotrack,我需要通过AudioTrack播放pcm文件,我想知道它是否已播放完毕 我的代码: scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { public void run() { if (audioTrack.getPlayState() == AudioTrack.PLAYSTATE_STOPPED) { System.out.println("st

我需要通过AudioTrack播放pcm文件,我想知道它是否已播放完毕

我的代码:

scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { public
              void run() {

              if (audioTrack.getPlayState() == AudioTrack.PLAYSTATE_STOPPED) {
              System.out.println("stop");  } // doSomethingUseful();
              }
             }, 0, 1, TimeUnit.SECONDS);
然后

但以上这些都不起作用

我怎么知道它已经播放完毕呢?

请参阅本文

此解决方案使用“OnPlaybackPositionUpdateListener”,通过标记音频长度来通知播放何时达到特定标记

audioTrack
                    .setPlaybackPositionUpdateListener(new OnPlaybackPositionUpdateListener() {

                        @Override
                        public void onPeriodicNotification(AudioTrack track) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void onMarkerReached(AudioTrack track) {
                            // TODO Auto-generated method stub

                            stop();

                            // messageHandler.sendMessage(messageHandler.obtainMessage(PLAYBACK_END_REACHED));

                        }
                    });
audioTrack
                    .setPlaybackPositionUpdateListener(new OnPlaybackPositionUpdateListener() {

                        @Override
                        public void onPeriodicNotification(AudioTrack track) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void onMarkerReached(AudioTrack track) {
                            // TODO Auto-generated method stub

                            stop();

                            // messageHandler.sendMessage(messageHandler.obtainMessage(PLAYBACK_END_REACHED));

                        }
                    });