seek bar not working when playing song from sd card
in my app i am trying to play a media player along with a seek bar. When i tried to play the song from a folder stored in my app it was working fine and the seek bar get moved.
When i tried to play continuous songs from SD card it gets crashed and in logcat it showed the following error.
ERROR/sdcard play(2500): 02 - bird flu.mp3
ERROR/MediaPlayer(2500): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
ERROR/MediaPlayer(2500): error (1, -4)
ERROR/MediaPlayer(2500): Attempt to call getDuration without a valid mediaplayer
ERROR/MediaPlayer(2500): error (-38, 0)
ERROR/sdcard play(2500): 03 Un Mela Aasadhaan.mp3
ERROR/MediaPlayer(2500): setDataSource called in state 0
ERROR/MediaPlayer(2500): prepareAsync called in state 0
ERROR/MediaPlayer(2500): Attempt to call getDuration without a valid mediaplayer
ERROR/MediaPlayer(2500): error (-38, 0)
Following is my code
sv = (SurfaceView)findViewById(R.id.surfaceView1);
// mediaPlayer =MediaPlayer.create(this, R.raw.b);
init_mediaPlayer();
// sv.postDelayed(runnable,200);
seek = (SeekBar)findViewById(R.id.seekBar1);
seek.setMax(mediaPlayer.getDuration());
System.out.println("**** MEDIA PLAYER DURATION "+ mediaPlayer.getDuration());
play.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
mediaPlayer.start();
myHandler.post(runn);
isPlaying = true;
}
});
pause.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
mediaPlayer.pause();
mediaPlayer.prepare();
}
});
seek.setProgress(mediaPlayer.getCurrentPosition());
System.out.println("**** MEDIA PLAYER CURRENT DURATION "+ mediaPlayer.getCurrentPosition());
}
private void init_mediaPlayer()
{
System.gc();
final String[] proj = { MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Audio.Media.SIZE };
Log.e("media",""+proj);
musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,proj, null, null, null);
Log.e("media1",""+musiccursor);
count = musiccursor.getCount();
Log.e("media2",""+co开发者_运维技巧unt);
if(musiccursor!=null)
{
musiccursor.moveToFirst();
MediaPlayer mediaPlayer = new MediaPlayer();
do{
filename=musiccursor.getString(2);
Log.e("sdcard play",filename);
mediaPlayer.setDataSource(filename);
mediaPlayer.prepare();
if(mediaPlayer.getCurrentPosition()==mediaPlayer.getDuration())
{
end=musiccursor.moveToNext();
}
}
while(end);
}
take a look at this
http://remwebdevelopment.com/dev/a63/Playing-Audio-error-PVMFErrNotSupported-Prepare-failed-status0x1-.html
search for more info on PVMFErrNotSupported
Following is my code, where i am able to play the song with a seek bar moving...
//SeekBar MediaPlayer mediaPlayer; boolean isPlaying = false; SurfaceView sv; //Media Player Cursor musiccursor; int music_column_index; int count; String filename; boolean end=true;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
sv = (SurfaceView)findViewById(R.id.surfaceView1);
mediaPlayer =MediaPlayer.create(this, R.raw.blue);
seekbar = (SeekBar)findViewById(R.id.seekBar1);
seekbar.setMax(mediaPlayer.getDuration());
System.out.println("**** MEDIA PLAYER DURATION "+ mediaPlayer.getDuration());
Start = (Button)findViewById(R.id.widget306);
Start.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mediaPlayer.start(); //--> Start Media Palyer
myHandler.post(runn); //--> SeekBar Progress
isPlaying = true;
}
});
seekbar.setProgress(mediaPlayer.getCurrentPosition());
seekbar = (SeekBar)findViewById(R.id.seekBar1);
}
//SeekBar thread
private Handler myHandler = new Handler();
final Runnable runn = new Runnable()
{
public void run()
{
if (mediaPlayer != null)
{
if (isPlaying )
{
try
{
int currentPosition = mediaPlayer.getCurrentPosition();
seekbar.setProgress(currentPosition);
}
catch (Exception e)
{
e.printStackTrace();
}
sv.postDelayed(runn, 150);
}
}
}
};
精彩评论