I have My Activity Code like Below:
public class Player extends Activity implements OnCompletionListener,
OnPreparedListener, OnErrorListener, OnBufferingUpdateListener, MusicFocusable {
private Boolean playState = false;
private String station = "http://38.101.19.5:9157";
public static final float DUCK_VOLUME = 0.1f;
private String artistName = null;
private String trackName = null;
private TextView artist;
private TextView track;
private TextView status;
private Button play;
enum AudioFocus {
NoFocusNoDuck, // we don't have audio focus, and can't duck
NoFocusCanDuck, // we don't have focus, but can play at a low volume
// ("ducking")
Focused // we have full audio focus
}
private AudioFocus mAudioFocus = AudioFocus.NoFocusNoDuck;
private MediaPlayer mPlayer = null;
private AndroidShoutcastLib shoutcast;
private AudioManager mAudioManager;
AudioFocusHelper mAudioFocusHelper = null;
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
// create the Audio Focus Helper, if the Audio Focus feature is
// available (SDK 8 or above)
if (android.os.Build.VERSION.SDK_INT >= 8) {
mAudioFocusHelper = new AudioFocusHelper(getApplicationContext(),
this);
}
else {
mAudioFocus = AudioFocus.Focused; // no focus feature, so we always "have" audio focus
}
status = (TextView) findViewById(R.id.status);
artist = (TextView) findViewById(R.id.artist);
artist.setSelected(true);
track = (TextView) findViewById(R.id.track);
track.setSelected(true);
play = (Button) findViewById(R.id.play);
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View btn) {
if (!playState) {
play.setText("Pause");
handler.postDelayed(handlePlayRequest, 300);
}
else {
play.setText("Play");
status.setText("Press Play");
handler.postDelayed(handlePlayRequest, 300);
}
}
});
shoutcast = new AndroidShoutcastLib();
try {
shoutcast.setShoutcastUrl(station);
} catch (InvalidStreamURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
shoutcast.setOnMetadataChangedListener(new MetadataListener(){
@Override
public void OnMetadataChanged(Metadata item) {
artistName = item.artist;
trackName = item.track;
updateMeta();
}
});
setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
public void onDestroy() {
super.onDestroy();
shoutcast = null;
handler.removeCallbacks(handlePlayRequest);
}
public void updateMeta() {
handler.post(new Runnable() {
@Override
public void run() {
// This gets executed on the UI thread so it can safely modify Views
artist.setText(artistName);
track.setText(trackName);
}
});
}
private final Runnable handlePlayRequest = new Runnable() {
public void run() {
if (playState) {
Log.d("Player", "Stop Called");
giveUpAudioFocus();
mPlayer.stop();
mPlayer.reset();
mPlayer.release();
shoutcast.stopStream();
mPlayer = null;
playState = false;
}
else {
Log.d("Player", "Play Called");
createMediaPlayer();
getAudioFocus();
try {
mPlayer.setDataSource(shoutcast.startStream());
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidStreamURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mPlayer.prepareAsync();
}
}
};
private void createMediaPlayer() {
mPlayer = new MediaPlayer();
// Make sure the media player will acquire a wake-lock while
// playing. If we don't do
// that, the CPU might go to sleep while the song is playing,
// causing playback to stop.
//
// Remember that to use this, we have to declare the
// android.permission.WAKE_LOCK
// permission in AndroidManifest.xml.
mPlayer.setWakeMode(getApplicationContext(),
PowerManager.PARTIAL_WAKE_LOCK);
// we want the media player to notify us when it's ready preparing,
// and when it's done
// playing:
mPlayer.setOnPreparedListener(this);
mPlayer.setOnCompletionListener(this);
mPlayer.setOnErrorListener(this);
}
private void startPlayer() {
mPlayer.setVolume(1.0f, 1.0f);
if (!mPlayer.isPlaying()) {
Log.d("Player", "Starting Playback");
mPlayer.start();
playState = true;
status.setText("Streaming");
}
}
private void getAudioFocus() {
if (mAudioFocus != AudioFocus.Focused && mAudioFocusHelper != null
&& mAudioFocusHelper.requestFocus())
mAudioFocus = AudioFocus.Focused;
}
private void giveUpAudioFocus() {
if (mAudioFocus == AudioFocus.Focused && mAudioFocusHelper != null
&& mAudioFocusHelper.abandonFocus())
mAudioFocus = AudioFocus.NoFocusNoDuck;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_player, menu);
return true;
}
@Override
public void onBufferingUpdate(MediaPlayer arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
playState = false;
handler.post(handlePlayRequest);
return false;
}
@Override
public void onPrepared(MediaPlayer arg0) {
startPlayer();
}
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGainedAudioFocus() {
// TODO Auto-generated method stub
}
@Override
public void onLostAudioFocus(boolean canDuck) {
// TODO Auto-generated method stub
}
}
My Requirement is to Convert this Activity to Service Class,I have tried but not getting,Because I'm new to Android as well as new to Programing,
Could any one help?
First of all, make sure you understand why to use a Service and not AsyncTask. This is really helpful for the same and shows why you should use a Service instead of AsyncTask to play music in the background.
This will be very handy for you. It clearly shows how to use a Service to play music in the background.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With