Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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() {

}
Expand Down Expand Up @@ -118,5 +123,3 @@ License
limitations under the License.




23 changes: 23 additions & 0 deletions app/src/main/java/co/mobiwise/myapplication/MainActivity.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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();
}
});
}
}
2 changes: 2 additions & 0 deletions library/src/main/java/co/mobiwise/library/RadioListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ public interface RadioListener {
void onRadioStopped();

void onMetaDataReceived(String s, String s2);

void onPlayerException(Throwable throwable);
}
42 changes: 39 additions & 3 deletions library/src/main/java/co/mobiwise/library/RadioPlayerService.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -87,6 +89,10 @@ public enum State {
*/
private boolean mLock;

private AudioManager audioManager;

private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener;

/**
* Binder
*/
Expand Down Expand Up @@ -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();
}
}
};
}

/**
Expand All @@ -139,15 +157,29 @@ 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();
}
}

}

public void stop(){
if(!mLock){
mLock = true;

audioManager.abandonAudioFocus(audioFocusChangeListener);

getPlayer().stop();
}
}
Expand Down Expand Up @@ -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
Expand Down