title: Android playing Music in Background
body: <p>I have My Activity Code like Below:</p>
  
  <pre><code>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 &gt;= 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 &amp;&amp; mAudioFocusHelper != null
                  &amp;&amp; mAudioFocusHelper.requestFocus())
              mAudioFocus = AudioFocus.Focused;
      }
  
      private void giveUpAudioFocus() {
          if (mAudioFocus == AudioFocus.Focused &amp;&amp; mAudioFocusHelper != null
                  &amp;&amp; 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
  
      }
  
  }
  </code></pre>
  
  <p>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,</p>
  
  <p>Could any one help?</p>