From a51eacc37365f7d1e1d6d9d61ae793402dad1fcb Mon Sep 17 00:00:00 2001 From: Dylan Maryk Date: Sun, 30 Aug 2015 22:33:58 +0200 Subject: [PATCH 1/6] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3abaedc..0aeb6c3 100755 --- a/README.md +++ b/README.md @@ -56,6 +56,10 @@ Implement `RadioListener` to get notified on radio state changed. public class MainActivity extends Activity implements RadioListener ... @Override + public void onRadioConnected() { + + } + public void onRadioStarted() { } @@ -119,4 +123,3 @@ License - From 1588e792323ae1620e3bbd46d82d61ce6c71f0f7 Mon Sep 17 00:00:00 2001 From: Dylan Maryk Date: Sun, 30 Aug 2015 22:34:52 +0200 Subject: [PATCH 2/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0aeb6c3..9ee4f3f 100755 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ public class MainActivity extends Activity implements RadioListener } + @Override public void onRadioStarted() { } @@ -122,4 +123,3 @@ License limitations under the License. - From c683de40ba1bd779136f25281536d04482873988 Mon Sep 17 00:00:00 2001 From: Dylan Maryk Date: Sun, 6 Sep 2015 19:21:08 +0100 Subject: [PATCH 3/6] Add onPlayerException to RadioListener --- .../mobiwise/myapplication/MainActivity.java | 23 +++++++++++++++++++ .../co/mobiwise/library/RadioListener.java | 2 ++ .../mobiwise/library/RadioPlayerService.java | 4 +++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/co/mobiwise/myapplication/MainActivity.java b/app/src/main/java/co/mobiwise/myapplication/MainActivity.java index 5437f6a..d55b889 100755 --- a/app/src/main/java/co/mobiwise/myapplication/MainActivity.java +++ b/app/src/main/java/co/mobiwise/myapplication/MainActivity.java @@ -1,6 +1,8 @@ package co.mobiwise.myapplication; import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Button; @@ -108,4 +110,25 @@ public void run() { public void onMetaDataReceived(String s, String s1) { //TODO Check metadata values. Singer name, song name or whatever you have. } + + @Override + public void onPlayerException(Throwable throwable) { + runOnUiThread(new Runnable() { + @Override + public void run() { + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) + .setTitle("Cannot Stream Radio") + .setMessage("There was a problem streaming the radio. Please check your Internet connection.") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + + AlertDialog dialog = builder.create(); + dialog.show(); + } + }); + } } diff --git a/library/src/main/java/co/mobiwise/library/RadioListener.java b/library/src/main/java/co/mobiwise/library/RadioListener.java index 645ea26..42d42e0 100755 --- a/library/src/main/java/co/mobiwise/library/RadioListener.java +++ b/library/src/main/java/co/mobiwise/library/RadioListener.java @@ -14,4 +14,6 @@ public interface RadioListener { void onRadioStopped(); void onMetaDataReceived(String s, String s2); + + void onPlayerException(Throwable throwable); } diff --git a/library/src/main/java/co/mobiwise/library/RadioPlayerService.java b/library/src/main/java/co/mobiwise/library/RadioPlayerService.java index 2fdf384..7815627 100755 --- a/library/src/main/java/co/mobiwise/library/RadioPlayerService.java +++ b/library/src/main/java/co/mobiwise/library/RadioPlayerService.java @@ -185,7 +185,9 @@ public void playerStopped(int i) { @Override public void playerException(Throwable throwable) { - //Empty + for (RadioListener mRadioListener : mListenerList){ + mRadioListener.onPlayerException(throwable); + } } @Override From 9bad9b66d820f4479a557ec4b03f1655659e32f1 Mon Sep 17 00:00:00 2001 From: Dylan Maryk Date: Sun, 6 Sep 2015 19:46:38 +0100 Subject: [PATCH 4/6] Allow re-attempts to connect --- .../src/main/java/co/mobiwise/library/RadioPlayerService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/src/main/java/co/mobiwise/library/RadioPlayerService.java b/library/src/main/java/co/mobiwise/library/RadioPlayerService.java index 7815627..62395b6 100755 --- a/library/src/main/java/co/mobiwise/library/RadioPlayerService.java +++ b/library/src/main/java/co/mobiwise/library/RadioPlayerService.java @@ -185,6 +185,8 @@ public void playerStopped(int i) { @Override public void playerException(Throwable throwable) { + mLock = false; + for (RadioListener mRadioListener : mListenerList){ mRadioListener.onPlayerException(throwable); } From e31dba98bd472a82db19594d90fbbdbce7e538ca Mon Sep 17 00:00:00 2001 From: Dylan Maryk Date: Mon, 7 Sep 2015 13:50:17 +0100 Subject: [PATCH 5/6] Take into account other apps may be playing audio --- .../mobiwise/library/RadioPlayerService.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/co/mobiwise/library/RadioPlayerService.java b/library/src/main/java/co/mobiwise/library/RadioPlayerService.java index 62395b6..ffb59ea 100755 --- a/library/src/main/java/co/mobiwise/library/RadioPlayerService.java +++ b/library/src/main/java/co/mobiwise/library/RadioPlayerService.java @@ -1,7 +1,9 @@ package co.mobiwise.library; import android.app.Service; +import android.content.Context; import android.content.Intent; +import android.media.AudioManager; import android.media.AudioTrack; import android.os.Binder; import android.os.IBinder; @@ -87,6 +89,10 @@ public enum State { */ private boolean mLock; + private AudioManager audioManager; + + private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener; + /** * Binder */ @@ -124,6 +130,18 @@ public void onCreate() { if(mTelephonyManager != null) { mTelephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); } + + audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); + audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() { + @Override + public void onAudioFocusChange(int focusChange) { + if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { + play(mRadioUrl); + } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { + stop(); + } + } + }; } /** @@ -139,8 +157,17 @@ public void play(String mRadioUrl){ stop(); } else if(!mLock){ - mLock = true; - getPlayer().playAsync(mRadioUrl); + int audioFocusRequestResult = audioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); + + if (audioFocusRequestResult == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { + mLock = true; + + getPlayer().playAsync(mRadioUrl); + } else { + mLock = false; + + notifyRadioStopped(); + } } } @@ -148,6 +175,9 @@ else if(!mLock){ public void stop(){ if(!mLock){ mLock = true; + + audioManager.abandonAudioFocus(audioFocusChangeListener); + getPlayer().stop(); } } From e13c986cd5d7cb8e5b4624d5e2659ff15565d7aa Mon Sep 17 00:00:00 2001 From: Dylan Maryk Date: Tue, 8 Sep 2015 10:56:31 +0100 Subject: [PATCH 6/6] Fix stopping stream sometimes causing stream to play again --- .../src/main/java/co/mobiwise/library/RadioPlayerService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/src/main/java/co/mobiwise/library/RadioPlayerService.java b/library/src/main/java/co/mobiwise/library/RadioPlayerService.java index ffb59ea..85b7e14 100755 --- a/library/src/main/java/co/mobiwise/library/RadioPlayerService.java +++ b/library/src/main/java/co/mobiwise/library/RadioPlayerService.java @@ -157,6 +157,8 @@ public void play(String mRadioUrl){ stop(); } else if(!mLock){ + isSwitching = false; + int audioFocusRequestResult = audioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); if (audioFocusRequestResult == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {