Android playing Music in Background

40,461

Solution 1

If you just need to play music in your app, play it in a thread launched from your app/use AsyncTask class to do it for you.

Use this code. Add this class (Enclosed in your activity class).

public class BackgroundSound extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        MediaPlayer player = MediaPlayer.create(YourActivity.this, R.raw.test_cbr); 
        player.setLooping(true); // Set looping 
        player.setVolume(100,100); 
        player.start(); 

        return null;
    }

}

On the other hand, if you want to use a service you can look at this page.

Solution 2

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.

Solution 3

Few steps to follow.....

1.First go through the service examples.

2.From this activity start a service ie., whenever this app opened navigate activity to service the activity----> service.

3.In service override onstart().

4.In onstart() create musicplayer function and cal the song you want.

5.And start like this mp.play();

6.Now it will run on background

Share:
40,461
String
Author by

String

Updated on November 09, 2020

Comments

  • String
    String over 3 years

    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?