title: changing a track media player android
body: <p>I am currently playing a song using MediaPlayer which plays fine. On user selecting a different song, I'm trying to play that out. 
  But, I get error(1,-2147483648) and Error(1, -2147483648) by the MediaPlayer.
  These logs are printed after the call to prepareASync();
  Note: The path of the file looks correct. However, how do I check for a valid filepath?</p>
  
  <p>The sequence is as follows:
  <code></p>
  
  <pre><code>           mPlayer.reset();
             Log.d(TAG,"after reset");
             mPlayer.setDataSource(mTrackToBePlayed);
             Log.d(TAG,"after setDataSource");
            // mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
             mPlayer.setOnPreparedListener(preparedListener);
             Log.d(TAG,"after setOnPreparedListener");
             mPlayer.setOnErrorListener(errorListener);
             Log.d(TAG,"after setting errorListener");
             mPlayer.prepareAsync();
             Log.d(TAG,"after prepareAsync");
  </code></pre>
  
  <p></code></p>
  
  <p>The code for reference is this: in onResume() of my main activity(on returning to which, I want to start playback) I am making the calls MusicUtils.createPlayer(); and 
                  MusicUtils.playTrack(mCurrentTrack);</p>
  
  <p><code></p>
  
  <pre><code>public static void playTrack(String track) {
  
      mTrackToBePlayed = track;   
  
      try {
             mPlayer.reset();
             Log.d(TAG,"after reset");
             mPlayer.setDataSource(mTrackToBePlayed);
             Log.d(TAG,"after setDataSource");
            // mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
             mPlayer.setOnPreparedListener(preparedListener);
             Log.d(TAG,"after setOnPreparedListener");
             mPlayer.setOnErrorListener(errorListener);
             Log.d(TAG,"after setting errorListener");
             mPlayer.prepareAsync();
             Log.d(TAG,"after prepareAsync");
  
      } catch (IOException e) {
  
      } catch(IllegalArgumentException e) {
  
      }
  
      preparedListener = new MediaPlayer.OnPreparedListener() {
  
          @Override
          public void onPrepared(MediaPlayer mp) {
              // TODO Auto-generated method stub
              mp.start();
              Log.d(TAG,"after start");
          }
      };
  
       errorListener = new MediaPlayer.OnErrorListener() {
           public boolean onError(MediaPlayer mp, int what, int extra) {
               switch (what) {
               case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
                   Log.d(TAG,"in onError");
                  // mIsInitialized = false;
                   mp.release();
                   // Creating a new MediaPlayer and settings its wakemode does not
                   // require the media service, so it's OK to do this now, while the
                   // service is still being restarted
                  try{
                   mp = new MediaPlayer(); 
                   mp.reset();
                   mp.setDataSource(mTrackToBePlayed);
                  // mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                   mp.prepareAsync();
                   mPlayer = mp;
                  // mPlayer.start();
                  } catch (Exception e) {
  
                  }
                   //MediaPlayer.create(mContext, mTrackToBePlayed);
                  // mPlayer.setWakeMode(MediaPlaybackService.this, PowerManager.PARTIAL_WAKE_LOCK);                 
                   return true;
               default:
                   Log.d("MusicPlayer", "Error: " + what + "," + extra);
                   break;
               }
               return false;
          }
       };
  
  
      //mPlayer.start();
  
  }
  
  public static boolean isPlaying() {
      return mPlayer.isPlaying();
  }
  
  public static void pauseTrack() {
      mPlayer.pause();
  }
  
  public static void startTrack() {
      mPlayer.start();
  }
  
  public static void stopTrack() {
      mPlayer.stop();
  }
  
  public static void releasePlayer() {
      mPlayer.release();
  }
  </code></pre>
  
  <p></code></p>
  
  <p><code></p>
  
  <p>This function is present in MusicUtils and is used to obtain the first track that the cursor returns</p>
  
  <pre><code>public static void retrieveDefaultPath() {
  
      String[] STAR = { "*" };           
      Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;    
      String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";     
      mCursor = mContentResolver.query(allsongsuri, STAR, selection, null, null);     
      if (mCursor != null) {        
          if (mCursor.moveToFirst()) {          
              //do {               
                  //mSongName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));   
                  //mSongList.add(mSongName);//populate the list of display names
                  int song_id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Audio.Media._ID));   
                  //mMusicIDs.put(song_id, counter++);//fill the HashMap with IDs corresponding to the positions
                  String fullpath = mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Media.DATA));            
                  String album_name = mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));          
                  int album_id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));               
                  String artist_name = mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));         
                  int artist_id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));        
                  //} while (cursor.moveToNext());       
  
  
                   mDefaultPath = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + "/" + song_id;
                   Slideshow.mCurrentTrack = mDefaultPath;
  
      }      
          if  (mCursor != null) { 
               mCursor.close();   
          }
      } 
  }
  </code></pre>
  
  <p></code>
  <code>
  The following function is used to obtain all the tracks on the device to display using the ListActivity.</p>
  
  <pre><code>public void getAllSongsFromSDCARD()  {     
      String[] STAR = { "*" };           
      Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;    
      String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";     
      cursor = managedQuery(allsongsuri, STAR, selection, null, null);     
      if (cursor != null) {        
          if (cursor.moveToFirst()) {          
              do {               
                  mSongName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));   
                  mSongList.add(mSongName);//populate the list of display names
                  int song_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID));   
                  Log.d("Music List","ID: "+song_id+" counter:"+counter);
  
                  mMusicIDs.put(counter++, song_id);//fill the HashMap with IDs corresponding to the positions
                  String fullpath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));            
                  String album_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));          
                  int album_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));               
                  String artist_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));         
                  int artist_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));        
                  } while (cursor.moveToNext());       
      }      
         cursor.close();    
      } 
  } 
  </code></pre>
  
  <p>I use the ID that the user selects and obtain the filepath in the following way:</p>
  
  <pre><code> music_id = (Integer)mMusicIDs.get(position);
   mSelectedPath = mSelectedPath + "/" + music_id;
  </code></pre>
  
  <p></code></p>
  
  <p>Logcat:</p>
  
  <p>08-31 18:07:36.348: D/dalvikvm(23090): GC_EXTERNAL_ALLOC freed 2K, 46% free 3088K/5703K, external 1461K/1538K, paused 32ms</p>
  
  <p>08-31 18:07:38.860: D/tag(23090): inside oncreate</p>
  
  <p>08-31 18:07:38.860: D/ImageSwitcher(23090): cache size:1</p>
  
  <p>08-31 18:07:39.030: D/ImageSwitcher(23090): TOTAL NUM IMAGES: 838</p>
  
  <p>08-31 18:07:39.150: I/AudioSystem(23090): getting audio flinger</p>
  
  <p>08-31 18:07:39.150: I/AudioSystem(23090): returning new audio session id</p>
  
  <p>08-31 18:07:39.150: D/IAudioFlinger(23090): newAudioSessionId In</p>
  
  <p>08-31 18:07:39.150: D/IAudioFlinger(23090): newAudioSessionId Out, id = 175</p>
  
  <p>08-31 18:07:39.150: D/MediaPlayer(23090): reset() in</p>
  
  <p>08-31 18:07:39.150: D/MediaPlayer(23090): reset() out</p>
  
  <p>08-31 18:07:39.150: D/MusicUtils(23090): after reset</p>
  
  <p>08-31 18:07:39.160: D/MusicUtils(23090): after setDataSource</p>
  
  <p>08-31 18:07:39.160: D/MusicUtils(23090): after setOnPreparedListener</p>
  
  <p>08-31 18:07:39.160: D/MusicUtils(23090): after setting errorListener</p>
  
  <p>08-31 18:07:39.170: D/MusicUtils(23090): after prepareAsync</p>
  
  <p>08-31 18:07:39.250: D/MediaPlayer(23090): start() in</p>
  
  <p>08-31 18:07:39.260: D/MediaPlayer(23090): start() out</p>
  
  <p>08-31 18:07:39.270: D/MediaPlayer(23090): start() in</p>
  
  <p>08-31 18:07:39.270: D/MediaPlayer(23090): start() out</p>
  
  <p>08-31 18:07:39.270: D/MusicUtils(23090): after start</p>
  
  <p>08-31 18:07:49.340: D/MediaPlayer(23090): pause() in</p>
  
  <p>08-31 18:07:49.340: D/MediaPlayer(23090): pause() out
  08-31 18:07:49.560: D/dalvikvm(23090): GC_CONCURRENT freed 239K, 45% free 3260K/5831K, external 494K/1006K, paused 10ms+7ms</p>
  
  <p>08-31 18:07:50.842: D/Music List(23090): in onCreate before getAllSongsFromSDCARD</p>
  
  <p>08-31 18:07:50.922: D/TAG(23090): set adapter</p>
  
  <p>08-31 18:07:50.922: D/TAG(23090): set adapter done</p>
  
  <p>08-31 18:07:51.953: D/dalvikvm(23090): GC_EXTERNAL_ALLOC freed 146K, 45% free 3264K/5831K, external 794K/855K, paused 29ms</p>
  
  <p>08-31 18:07:53.905: D/MusicList(23090): after setItemChecked</p>
  
  <p>08-31 18:07:54.585: D/Settings(23090): inside onActivityResult</p>
  
  <p>08-31 18:07:55.476: W/KeyCharacterMap(23090): Can't open keycharmap file</p>
  
  <p>08-31 18:07:55.476: W/KeyCharacterMap(23090): Error loading keycharmap </p>
  
  <p>file '/system/usr/keychars/cy8c-touchscreen.kcm.bin'. hw.keyboards.65538.devname='cy8c-touchscreen'
  08-31 18:07:55.476: I/KeyCharacterMap(23090): Using default 
  keymap: /system/usr/keychars/qwerty.kcm.bin</p>
  
  <p>08-31 18:07:55.486: D/MediaPlayer(23090): reset() in</p>
  
  <p>08-31 18:07:55.486: D/MediaPlayer(23090): reset() out</p>
  
  <p>08-31 18:07:55.486: D/MusicUtils(23090): after reset</p>
  
  <p>08-31 18:07:55.486: D/MusicUtils(23090): after setDataSource</p>
  
  <p>08-31 18:07:55.486: D/MusicUtils(23090): after setOnPreparedListener</p>
  
  <p>08-31 18:07:55.486: D/MusicUtils(23090): after setting errorListener</p>
  
  <p>08-31 18:07:55.486: D/MusicUtils(23090): after prepareAsync</p>
  
  <p>08-31 18:07:55.496: E/MediaPlayer(23090): error (1, -2147483648)</p>
  
  <p>08-31 18:07:55.506: E/MediaPlayer(23090): Error (1,-2147483648)</p>
  
  <p>08-31 18:07:55.506: D/MusicPlayer(23090): Error: 1,-2147483648</p>