从SD卡播放歌曲时,请求酒吧不工作

时间:2011-05-13 16:56:51

标签: android media-player seekbar

在我的应用程序中,我正在尝试与搜索栏一起播放媒体播放器。当我试图从我的应用程序中存储的文件夹中播放歌曲时,它工作正常并且搜索栏被移动。

当我尝试从SD卡播放连续歌曲时,它会崩溃并在logcat中显示以下错误。

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)

以下是我的代码

 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",""+count);

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

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:-1)

以下是我的代码,我可以用搜索条移动来播放这首歌......

//搜索栏     MediaPlayer mediaPlayer;     boolean isPlaying = false;     SurfaceView sv; //媒体播放器     光标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);
            }
          }
      }
 };