Service onStartCommand being called once activity ends
<p>I start my service when I click the play button to play a song and bundle the song mp3 with it and receive that in the onStartCommand. The problem is that when my activity that starts the service ends, my service calls onStartCommand again. When it goes to receive that bundle it's not there because the activity did not start it this time. Because of this I'm getting an illegalstateexception when preparing my mediaplayer. I am not binding my service.</p>

<p>Why does the onStartCommand get called when my activity ends?</p>

<p>Starting the service:</p>

<pre><code>Intent i = new Intent(SongList.this, MyService.class);                          
i.putExtra("songURL", user.songurlz);
i.putExtra("songNAME", songplay_name);
startService(i);
</code></pre>

<p>The service class:</p>

<pre><code>public class MyService extends Service {

static MediaPlayer mediaPlayer;
static int pauseplay;
static NotificationManager notificationManagerPlay;
static CharSequence tickerText;
static Notification notification4; // Notification variable (for song playing)
TelephonyManager telephonyManager;
PhoneStateListener listener;
static Notification notification;
static NotificationManager mNotificationManager;
String songurl;
String songname;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    super.onCreate();       

    mediaPlayer = new MediaPlayer();
    pauseplay = 1;
    MainMenu.serviceRunning = 1;
    telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);


    // Create a new PhoneStateListener
    listener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {

            switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:

                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:               
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                if (mediaPlayer.isPlaying() == true &amp;&amp; mediaPlayer != null) {
                    pauseSong();
                }

                break;
            }

        }
    };

    // Register the listener wit the telephony manager
    telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);



}   

public int onStartCommand (Intent intent, int flags, int startId)
{
    super.onStartCommand(intent, flags, startId);

    if (intent != null) {
        Bundle bundle = intent.getExtras();
        songurl = bundle.getString("songURL"); // Retrieve your data using the name

        Bundle bundle2 = intent.getExtras();
        songname = bundle2.getString("songNAME"); // Retrieve your data using the name
    }

    Toast toast = Toast.makeText(getApplicationContext(), "Now Playing: " + songname, Toast.LENGTH_LONG);
    toast.show();                           

    // configure the intent
    Intent playIntent = new Intent(MyService.this, SongList.class);
    final PendingIntent pendingIntent = PendingIntent.getActivity(MyService.this, 0, playIntent, 0);

    notification = new Notification(R.drawable.playicon, "Buffering...", System
            .currentTimeMillis());

    notification.contentView = new RemoteViews(getPackageName(), R.layout.custom_notification2);
    notification.contentIntent = pendingIntent;     
    if (SongList.bitmap != null) {
        notification.contentView.setImageViewBitmap(R.id.notifimage, SongList.bitmap);
    } else {
        notification.contentView.setImageViewResource(R.id.notifimage, R.drawable.icon);
    }
    notification.contentView.setTextViewText(R.id.notiftitle, "Now Playing");
    notification.contentView.setTextViewText(R.id.notiftext, songname);
    notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT;

    mNotificationManager = (NotificationManager) getApplicationContext().getSystemService(
            Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(4, notification);

    mediaPlayer.reset();                                            
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);                  
    try {
        mediaPlayer.setDataSource(songurl);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   

    //register an error listener via MediaPlayer's setOnErrorListener
    mediaPlayer.setOnErrorListener(new OnErrorListener()
    {
        @Override
        public boolean onError(MediaPlayer mp,
                int what, int extra) {
            Log.e("MEDIAPLAYER ERRORS",
                    "what: " + what + "  extra: "   + extra);                                       
            mediaPlayer.reset();
            mNotificationManager.cancel(4);
            return false;
        }
    });

    mediaPlayer.prepareAsync();
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {                    
        @Override
        public void onPrepared(MediaPlayer mp) {
            mediaPlayer.start();
        }
    });   


    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
    {           
        public void onCompletion(MediaPlayer mp) 
        {               
            stopSelf();
        }           
    });
    return START_STICKY;    
}

@Override
public void onDestroy() {

    MainMenu.serviceRunning = 0;
    mNotificationManager.cancel(4);

}

public static void pauseSong(){       
    if (mediaPlayer.isPlaying() == true){
        mediaPlayer.pause();
        mNotificationManager.cancel(4);
        pauseplay = 0;
    }
}

public static void playSong(){       
    if (pauseplay == 0) {           
        mNotificationManager.notify(4, notification);
        mediaPlayer.start();
        pauseplay = 1;          
    }               
}   
</code></pre>

<p>}</p>
