title: overriden onPrepared not being called automatically
body: <p>The following is the service class of my music player, the implemented onPrepared() method is never called, so I have to use setOnPreparedListener to get the things done.
  I want to execute it from the unimplemented section.</p>
  
  <pre><code>public class MusicService extends Service implements MediaPlayer.OnPreparedListener,
  MediaPlayer.OnErrorListener,MediaPlayer.OnCompletionListener {
  
      //media player 
      private MediaPlayer player;
      //song list
      private ArrayList&lt;Song&gt; songs;
      //current position
      private int songPosn;
      private String songTitle="";
      private static final int NOTIFY_ID=1;
      private final IBinder musicBind = new MusicBinder();
  
      @Override
      public IBinder onBind(Intent intent) {
          return musicBind;
      }
  
      public boolean onUnbind(Intent intent){
          player.stop();
          player.release();
          return false;
      }
  
      @Override
      public void onCreate() {
          // TODO Auto-generated method stub
          super.onCreate();
          //initialize position
          songPosn = 0;
          //create player
          player = new MediaPlayer();
      }
  
      @Override
      public void onCompletion(MediaPlayer mp) {
          // TODO Auto-generated method stub
      }
  
      @Override
      public boolean onError(MediaPlayer mp, int what, int extra) {
          // TODO Auto-generated method stub
          return false;
      }
  
      //this is never being called and instead of this the one in setOnPreparedListener is called
      @Override
      public void onPrepared(MediaPlayer mp) {
          // TODO Auto-generated method stub
          //start music 
          mp.start();
  
          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);
  
          NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
          builder.setContentIntent(pendInt)
          .setSmallIcon(R.drawable.play)
          .setTicker(songTitle)
          .setOngoing(true)
          .setContentText("Playing")
          .setContentText(songTitle);
          Notification not = builder.build();
          startForeground(NOTIFY_ID, not);
      }
  
      public void initMusicPlayer(){
          //set player properties
          player.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
          player.setAudioStreamType(AudioManager.STREAM_MUSIC);
      }
  
      public void setSong(int songIndex){
          songPosn=songIndex;
      }
  
      public void setList(ArrayList&lt;Song&gt; theSongs){
          songs = theSongs;
      }
  
      public void playSong(){
          //play a cool song
          player.reset();
          //get song
  
          Song playSong = songs.get(songPosn);
          songTitle = playSong.getTitle();
          //get ID
          long currSong = playSong.getId();
          //set path to sdcard or squaremash server
          Uri trackUri = ContentUris.withAppendedId(android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, currSong);
          try {
              player.setDataSource(getApplicationContext(), trackUri);
          } catch (Exception e) {
              Log.e("Music service","Error: setting data source",e);  }
          player.prepareAsync();
          //this one is called, If I remove this, the above onPrepared method isnt called
          player.setOnPreparedListener(new OnPreparedListener() {
  
              @Override
              public void onPrepared(MediaPlayer mp) {
                  // TODO Auto-generated method stub
                  mp.start(); 
              }
          });
      }
  
      public void go(){
          player.start();
      }
      //previous song
      public void playPrev() {
          songPosn--;
          if(songPosn&lt;0)
              songPosn=songs.size()-1;
          playSong();
      }
      //next song
      public void playNext() {
          songPosn++;
          if(songPosn&gt;=songs.size())
              songPosn=0;
          playSong();
      }
  }
  </code></pre>