@@ -22,6 +22,7 @@ Licensed to the Apache Software Foundation (ASF) under one
2222import android .media .MediaPlayer ;
2323import android .media .MediaPlayer .OnCompletionListener ;
2424import android .media .MediaPlayer .OnErrorListener ;
25+ import android .media .MediaPlayer .OnInfoListener ;
2526import android .media .MediaPlayer .OnPreparedListener ;
2627import android .media .MediaRecorder ;
2728import android .os .Environment ;
@@ -48,7 +49,7 @@ Licensed to the Apache Software Foundation (ASF) under one
4849 * android_asset: file name must start with /android_asset/sound.mp3
4950 * sdcard: file name is just sound.mp3
5051 */
51- public class AudioPlayer implements OnCompletionListener , OnPreparedListener , OnErrorListener {
52+ public class AudioPlayer implements OnCompletionListener , OnPreparedListener , OnErrorListener , OnInfoListener {
5253
5354 // AudioPlayer modes
5455 public enum MODE { NONE , PLAY , RECORD };
@@ -62,12 +63,18 @@ public enum STATE { MEDIA_NONE,
6263 MEDIA_LOADING
6364 };
6465
66+ // AudiorPlayer informations
67+ public enum INFORMATION { MEDIA_BUFFERING_START ,
68+ MEDIA_BUFFERING_END
69+ };
70+
6571 private static final String LOG_TAG = "AudioPlayer" ;
6672
6773 // AudioPlayer message ids
6874 private static int MEDIA_STATE = 1 ;
6975 private static int MEDIA_DURATION = 2 ;
7076 private static int MEDIA_POSITION = 3 ;
77+ private static int MEDIA_INFO = 4 ;
7178 private static int MEDIA_ERROR = 9 ;
7279
7380 // Media error codes
@@ -482,6 +489,8 @@ public float getDuration(String file) {
482489 public void onPrepared (MediaPlayer player ) {
483490 // Listen for playback completion
484491 this .player .setOnCompletionListener (this );
492+ // Listen for info aboutplayback
493+ this .player .setOnInfoListener (this );
485494 // seek to any location received while not prepared
486495 this .seekToPlaying (this .seekOnPrepared );
487496 // If start playing after prepared
@@ -531,6 +540,20 @@ public boolean onError(MediaPlayer player, int arg1, int arg2) {
531540 return false ;
532541 }
533542
543+ @ Override
544+ public boolean onInfo (MediaPlayer player , int what , int extra ) {
545+ LOG .d (LOG_TAG , "AudioPlayer.onInfo(" + what + ", " + extra + ")" );
546+ switch (what ) {
547+ case MediaPlayer .MEDIA_INFO_BUFFERING_START :
548+ sendInfo (INFORMATION .MEDIA_BUFFERING_START );
549+ break ;
550+ case MediaPlayer .MEDIA_INFO_BUFFERING_END :
551+ sendInfo (INFORMATION .MEDIA_BUFFERING_END );
552+ break ;
553+ }
554+ return false ;
555+ }
556+
534557 /**
535558 * Set the state and send it to JavaScript.
536559 *
@@ -543,6 +566,15 @@ private void setState(STATE state) {
543566 this .state = state ;
544567 }
545568
569+ /**
570+ * Send information to Javascript.
571+ *
572+ * @param info
573+ */
574+ private void sendInfo (INFORMATION info ) {
575+ sendStatusChange (MEDIA_INFO , null , (float )info .ordinal ());
576+ }
577+
546578 /**
547579 * Set the mode and send it to JavaScript.
548580 *
0 commit comments