@@ -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
@@ -444,6 +451,8 @@ public float getDuration(String file) {
444451 public void onPrepared (MediaPlayer player ) {
445452 // Listen for playback completion
446453 this .player .setOnCompletionListener (this );
454+ // Listen for info aboutplayback
455+ this .player .setOnInfoListener (this );
447456 // seek to any location received while not prepared
448457 this .seekToPlaying (this .seekOnPrepared );
449458 // If start playing after prepared
@@ -493,6 +502,20 @@ public boolean onError(MediaPlayer player, int arg1, int arg2) {
493502 return false ;
494503 }
495504
505+ @ Override
506+ public boolean onInfo (MediaPlayer player , int what , int extra ) {
507+ LOG .d (LOG_TAG , "AudioPlayer.onInfo(" + what + ", " + extra + ")" );
508+ switch (what ) {
509+ case MediaPlayer .MEDIA_INFO_BUFFERING_START :
510+ sendInfo (INFORMATION .MEDIA_BUFFERING_START );
511+ break ;
512+ case MediaPlayer .MEDIA_INFO_BUFFERING_END :
513+ sendInfo (INFORMATION .MEDIA_BUFFERING_END );
514+ break ;
515+ }
516+ return false ;
517+ }
518+
496519 /**
497520 * Set the state and send it to JavaScript.
498521 *
@@ -505,6 +528,15 @@ private void setState(STATE state) {
505528 this .state = state ;
506529 }
507530
531+ /**
532+ * Send information to Javascript.
533+ *
534+ * @param info
535+ */
536+ private void sendInfo (INFORMATION info ) {
537+ sendStatusChange (MEDIA_INFO , null , (float )info .ordinal ());
538+ }
539+
508540 /**
509541 * Set the mode and send it to JavaScript.
510542 *
0 commit comments