diff --git a/README.md b/README.md index 3abaedc..9ee4f3f 100755 --- a/README.md +++ b/README.md @@ -56,6 +56,11 @@ Implement `RadioListener` to get notified on radio state changed. public class MainActivity extends Activity implements RadioListener ... @Override + public void onRadioConnected() { + + } + + @Override public void onRadioStarted() { } @@ -118,5 +123,3 @@ License limitations under the License. - - 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..85b7e14 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,19 @@ public void play(String mRadioUrl){ stop(); } else if(!mLock){ - mLock = true; - getPlayer().playAsync(mRadioUrl); + isSwitching = false; + + 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 +177,9 @@ else if(!mLock){ public void stop(){ if(!mLock){ mLock = true; + + audioManager.abandonAudioFocus(audioFocusChangeListener); + getPlayer().stop(); } } @@ -185,7 +217,11 @@ public void playerStopped(int i) { @Override public void playerException(Throwable throwable) { - //Empty + mLock = false; + + for (RadioListener mRadioListener : mListenerList){ + mRadioListener.onPlayerException(throwable); + } } @Override