Note that there are some explanatory texts on larger screens.

plurals
  1. POchanging a track media player android
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload