Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Please could anyone help me with this android programming. I just need the java

ID: 3819978 • Letter: P

Question

Please could anyone help me with this android programming. I just need the java code

1. Create a Service to download the MP3 provided This MUST extend IntentService

MP3 should be downloaded when the Download option is clicked you may use either DownloadService or DownloadManager

2. Create another Service to handle playback of your newly downloaded song

This should extend Service This MUST run the MediaPlayer itself inside of a Service

The buttons in your Activity should make requests to the Service to play/stop/pause/etc

the state of the MediaPlayer should not change when the user presses the back key or home key that is, if the MediaPlayer is playing music, leaving the Activity should not stop the music

3. Manage Notifications for the following events

1. download of the MP3 has started download of the MP3 has completed

2. when the user clicks on this notification clear the notification launch your MediaPlayer Activity (hint: PendingIntent)

the song is playing you shouldn’t allow this notification to be cleared

3. the notification should go away when playback is stopped or paused

4. when the user clicks on this notification launch your MediaPlayer Activity

THINGS TO NOTE

Your Activity should not actually play the music itself, that’s what your Service is for. Clicking on the playback Buttons from within your Activity should make calls to the Service, and the Service should take the appropriate action. This prevents playback from being stopped when your Activity loses focus Do not place the MP3 inside of your res/raw directory. You’re supposed to download it, then get the URI after the download, and use the URI to launch the MediaPlayer

Explanation / Answer

1):

we will create an IntentService to download the data from server. Once download is completed, the response will be sent back to activity. Lets create a new class DownloadService.java and extend it from android.app.IntentService. Now let us override onHandleIntent() method.

When service is started the onHandleIntent() method is called on the worker thread.Unlike Service, IntentService stops itself once it completes its task, so you don’t need to call stopSelf() for stoping the IntentService.

2):

package com.example.musicplayer;

import java.util.ArrayList;

import java.util.Random;

import android.app.Notification;

import android.app.PendingIntent;

import android.app.Service;

import android.content.ContentUris;

import android.content.Intent;

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.Binder;

import android.os.IBinder;

import android.os.PowerManager;

import android.util.Log;

/*

* This is demo code to accompany the Mobiletuts+ series:

* Android SDK: Creating a Music Player

*

* Sue Smith - February 2014

*/

public class MusicService extends Service implements

MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener,

MediaPlayer.OnCompletionListener {

        //media player

        private MediaPlayer player;

        //song list

        private ArrayList<Song> songs;

        //current position

        private int songPosn;

        //binder

        private final IBinder musicBind = new MusicBinder();

        //title of current song

        private String songTitle="";

        //notification id

        private static final int NOTIFY_ID=1;

        //shuffle flag and random

        private boolean shuffle=false;

        private Random rand;

        public void onCreate(){

                //create the service

                super.onCreate();

                //initialize position

                songPosn=0;

                //random

                rand=new Random();

                //create player

                player = new MediaPlayer();

                //initialize

                initMusicPlayer();

        }

        public void initMusicPlayer(){

                //set player properties

                player.setWakeMode(getApplicationContext(),

                                PowerManager.PARTIAL_WAKE_LOCK);

                player.setAudioStreamType(AudioManager.STREAM_MUSIC);

                //set listeners

                player.setOnPreparedListener(this);

                player.setOnCompletionListener(this);

                player.setOnErrorListener(this);

        }

        //pass song list

        public void setList(ArrayList<Song> theSongs){

                songs=theSongs;

        }

        //binder

        public class MusicBinder extends Binder {

                MusicService getService() {

                        return MusicService.this;

                }

        }

        //activity will bind to service

        @Override

        public IBinder onBind(Intent intent) {

                return musicBind;

        }

        //release resources when unbind

        @Override

        public boolean onUnbind(Intent intent){

                player.stop();

                player.release();

                return false;

        }

        //play a song

        public void playSong(){

                //play

                player.reset();

                //get song

                Song playSong = songs.get(songPosn);

                //get title

                songTitle=playSong.getTitle();

                //get id

                long currSong = playSong.getID();

                //set uri

                Uri trackUri = ContentUris.withAppendedId(

                                android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,

                                currSong);

                //set the data source

                try{

                        player.setDataSource(getApplicationContext(), trackUri);

                }

                catch(Exception e){

                        Log.e("MUSIC SERVICE", "Error setting data source", e);

                }

                player.prepareAsync();

        }

        //set the song

        public void setSong(int songIndex){

                songPosn=songIndex;    

        }

        @Override

        public void onCompletion(MediaPlayer mp) {

                //check if playback has reached the end of a track

                if(player.getCurrentPosition()>0){

                        mp.reset();

                        playNext();

                }

        }

        @Override

        public boolean onError(MediaPlayer mp, int what, int extra) {

                Log.v("MUSIC PLAYER", "Playback Error");

                mp.reset();

                return false;

        }

        @Override

        public void onPrepared(MediaPlayer mp) {

                //start playback

                mp.start();

                //notification

                Intent notIntent = new Intent(this, MainActivity.class);

                notIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                PendingIntent pendInt = PendingIntent.getActivity(this, 0,

                                notIntent, PendingIntent.FLAG_UPDATE_CURRENT);

                Notification.Builder builder = new Notification.Builder(this);

                builder.setContentIntent(pendInt)

                .setSmallIcon(R.drawable.play)

                .setTicker(songTitle)

                .setOngoing(true)

                .setContentTitle("Playing")

                .setContentText(songTitle);

                Notification not = builder.build();

                startForeground(NOTIFY_ID, not);

        }

        //playback methods

        public int getPosn(){

                return player.getCurrentPosition();

        }

        public int getDur(){

                return player.getDuration();

        }

        public boolean isPng(){

                return player.isPlaying();

        }

        public void pausePlayer(){

                player.pause();

        }

        public void seek(int posn){

                player.seekTo(posn);

        }

        public void go(){

                player.start();

        }

        //skip to previous track

        public void playPrev(){

                songPosn--;

                if(songPosn<0) songPosn=songs.size()-1;

                playSong();

        }

        //skip to next

        public void playNext(){

                if(shuffle){

                        int newSong = songPosn;

                        while(newSong==songPosn){

                                newSong=rand.nextInt(songs.size());

                        }

                        songPosn=newSong;

                }

                else{

                        songPosn++;

                        if(songPosn>=songs.size()) songPosn=0;

                }

                playSong();

        }

        @Override

        public void onDestroy() {

                stopForeground(true);

        }

        //toggle shuffle

        public void setShuffle(){

                if(shuffle) shuffle=false;

                else shuffle=true;

        }

}

3):

A):

MediaStore does not constantly update his database. Database is updated only after reboot and after sd card is mounted.

Use MediaScannerConnection.scanFile method to notify MediaStore. (MediaScannerConnection doucumentation) you can add multiple files/paths at once. Also worth noting is that this method is asynchronous, files are added in a separate process and this can take some time - you are notified when operation is completed.

D):

this is my activity:

C):

package com.example.musicplayer;

import java.util.ArrayList;

import java.util.Random;

import android.app.Notification;

import android.app.PendingIntent;

import android.app.Service;

import android.content.ContentUris;

import android.content.Intent;

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.Binder;

import android.os.IBinder;

import android.os.PowerManager;

import android.util.Log;

/*

* This is demo code to accompany the Mobiletuts+ series:

* Android SDK: Creating a Music Player

*

* Sue Smith - February 2014

*/

public class MusicService extends Service implements

MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener,

MediaPlayer.OnCompletionListener {

        //media player

        private MediaPlayer player;

        //song list

        private ArrayList<Song> songs;

        //current position

        private int songPosn;

        //binder

        private final IBinder musicBind = new MusicBinder();

        //title of current song

        private String songTitle="";

        //notification id

        private static final int NOTIFY_ID=1;

        //shuffle flag and random

        private boolean shuffle=false;

        private Random rand;

        public void onCreate(){

                //create the service

                super.onCreate();

                //initialize position

                songPosn=0;

                //random

                rand=new Random();

                //create player

                player = new MediaPlayer();

                //initialize

                initMusicPlayer();

        }

        public void initMusicPlayer(){

                //set player properties

                player.setWakeMode(getApplicationContext(),

                                PowerManager.PARTIAL_WAKE_LOCK);

                player.setAudioStreamType(AudioManager.STREAM_MUSIC);

                //set listeners

                player.setOnPreparedListener(this);

                player.setOnCompletionListener(this);

                player.setOnErrorListener(this);

        }

        //pass song list

        public void setList(ArrayList<Song> theSongs){

                songs=theSongs;

        }

        //binder

        public class MusicBinder extends Binder {

                MusicService getService() {

                        return MusicService.this;

                }

        }

        //activity will bind to service

        @Override

        public IBinder onBind(Intent intent) {

                return musicBind;

        }

        //release resources when unbind

        @Override

        public boolean onUnbind(Intent intent){

                player.stop();

                player.release();

                return false;

        }

        //play a song

        public void playSong(){

                //play

                player.reset();

                //get song

                Song playSong = songs.get(songPosn);

                //get title

                songTitle=playSong.getTitle();

                //get id

                long currSong = playSong.getID();

                //set uri

                Uri trackUri = ContentUris.withAppendedId(

                                android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,

                                currSong);

                //set the data source

                try{

                        player.setDataSource(getApplicationContext(), trackUri);

                }

                catch(Exception e){

                        Log.e("MUSIC SERVICE", "Error setting data source", e);

                }

                player.prepareAsync();

        }

        //set the song

        public void setSong(int songIndex){

                songPosn=songIndex;    

        }

        @Override

        public void onCompletion(MediaPlayer mp) {

                //check if playback has reached the end of a track

                if(player.getCurrentPosition()>0){

                        mp.reset();

                        playNext();

                }

        }

        @Override

        public boolean onError(MediaPlayer mp, int what, int extra) {

                Log.v("MUSIC PLAYER", "Playback Error");

                mp.reset();

                return false;

        }

        @Override

        public void onPrepared(MediaPlayer mp) {

                //start playback

                mp.start();

                //notification

                Intent notIntent = new Intent(this, MainActivity.class);

                notIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                PendingIntent pendInt = PendingIntent.getActivity(this, 0,

                                notIntent, PendingIntent.FLAG_UPDATE_CURRENT);

                Notification.Builder builder = new Notification.Builder(this);

                builder.setContentIntent(pendInt)

                .setSmallIcon(R.drawable.play)

                .setTicker(songTitle)

                .setOngoing(true)

                .setContentTitle("Playing")

                .setContentText(songTitle);

                Notification not = builder.build();

                startForeground(NOTIFY_ID, not);

        }

        //playback methods

        public int getPosn(){

                return player.getCurrentPosition();

        }

        public int getDur(){

                return player.getDuration();

        }

        public boolean isPng(){

                return player.isPlaying();

        }

        public void pausePlayer(){

                player.pause();

        }

        public void seek(int posn){

                player.seekTo(posn);

        }

        public void go(){

                player.start();

        }

        //skip to previous track

        public void playPrev(){

                songPosn--;

                if(songPosn<0) songPosn=songs.size()-1;

                playSong();

        }

        //skip to next

        public void playNext(){

                if(shuffle){

                        int newSong = songPosn;

                        while(newSong==songPosn){

                                newSong=rand.nextInt(songs.size());

                        }

                        songPosn=newSong;

                }

                else{

                        songPosn++;

                        if(songPosn>=songs.size()) songPosn=0;

                }

                playSong();

        }

        @Override

        public void onDestroy() {

                stopForeground(true);

        }

        //toggle shuffle

        public void setShuffle(){

                if(shuffle) shuffle=false;

                else shuffle=true;

        }

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote