开发者

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);
            }
          }
      }
 };
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜