diff --git a/src/android/AudioHandler.java b/src/android/AudioHandler.java index 815f9f8b..b7749995 100644 --- a/src/android/AudioHandler.java +++ b/src/android/AudioHandler.java @@ -151,6 +151,11 @@ else if (action.equals("getDurationAudio")) { float f = this.getDurationAudio(args.getString(0), args.getString(1)); callbackContext.sendPluginResult(new PluginResult(status, f)); return true; + } + else if (action.equals("getBufferedPercentAudio")) { + int f = this.getBufferedPercentAudio(args.getString(0)); + callbackContext.sendPluginResult(new PluginResult(status, f)); + return true; } else if (action.equals("create")) { String id = args.getString(0); @@ -356,6 +361,19 @@ public float getDurationAudio(String id, String file) { AudioPlayer audio = getOrCreatePlayer(id, file); return audio.getDuration(file); } + + /** + * Get percentage of buffered data of playback. + * @param id The id of the audio player + * @return buffered data in percentage + */ + public int getBufferedPercentAudio(String id) { + AudioPlayer audio = this.players.get(id); + if (audio != null) { + return audio.getBufferedPercent(); + } + return 0; + } /** * Set the audio device to be used for playback. diff --git a/src/android/AudioPlayer.java b/src/android/AudioPlayer.java index 26248e58..b7234f92 100644 --- a/src/android/AudioPlayer.java +++ b/src/android/AudioPlayer.java @@ -20,6 +20,7 @@ Licensed to the Apache Software Foundation (ASF) under one import android.media.AudioManager; import android.media.MediaPlayer; +import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.MediaPlayer.OnPreparedListener; @@ -43,7 +44,7 @@ Licensed to the Apache Software Foundation (ASF) under one * android_asset: file name must start with /android_asset/sound.mp3 * sdcard: file name is just sound.mp3 */ -public class AudioPlayer implements OnCompletionListener, OnPreparedListener, OnErrorListener { +public class AudioPlayer implements OnCompletionListener, OnPreparedListener, OnErrorListener, OnBufferingUpdateListener { // AudioPlayer modes public enum MODE { NONE, PLAY, RECORD }; @@ -87,6 +88,8 @@ public enum STATE { MEDIA_NONE, private boolean prepareOnly = true; // playback after file prepare flag private int seekOnPrepared = 0; // seek to this location once media is prepared + private int bufferedPercent = 0; + /** * Constructor. * @@ -542,6 +545,7 @@ private void loadAudioFile(String file) throws IllegalArgumentException, Securit this.setMode(MODE.PLAY); this.setState(STATE.MEDIA_STARTING); this.player.setOnPreparedListener(this); + this.player.setOnBufferingUpdateListener(this); this.player.prepareAsync(); } else { @@ -617,4 +621,15 @@ public float getCurrentAmplitude() { } return 0; } + + @Override + public void onBufferingUpdate(MediaPlayer mp, int percent) { + // TODO Auto-generated method stub + bufferedPercent = percent; + + } + + public int getBufferedPercent() { + return bufferedPercent; + } } diff --git a/www/Media.js b/www/Media.js index 192d4b32..46d56e58 100644 --- a/www/Media.js +++ b/www/Media.js @@ -124,6 +124,17 @@ Media.prototype.getCurrentPosition = function(success, fail) { }, fail, "Media", "getCurrentPositionAudio", [this.id]); }; +/** + * Get buffered percent of audio. + */ +Media.prototype.getBufferedPercent = function(success, fail) { + var me = this; + exec(function(p) { + me._position = p; + success(p); + }, fail, "Media", "getBufferedPercentAudio", [this.id]); +}; + /** * Start recording audio file. */