панель поиска не работает при воспроизведении песни с SD-карты - PullRequest
0 голосов
/ 13 мая 2011

в моем приложении я пытаюсь играть медиаплеер вместе с панелью поиска. Когда я пытался воспроизвести песню из папки, хранящейся в моем приложении, она работала нормально, и панель поиска сдвинулась.

При попытке воспроизвести непрерывные песни с 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 ]

2 голосов
/ 13 мая 2011

посмотрите на этот

http://remwebdevelopment.com/dev/a63/Playing-Audio-error-PVMFErrNotSupported-Prepare-failed-status0x1-.html

для получения дополнительной информации о PVMFErrNotSupported

0 голосов
/ 24 мая 2011

Ниже приведен мой код, где я могу играть песню с движущейся панелью поиска ...

// SeekBar MediaPlayer mediaPlayer; логическое isPlaying = false; SurfaceView SV; //Медиа-плейер Курсор музыкальный курсор; int music_column_index; int count; Строка имени файла; логический конец = 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);
            }
          }
      }
 };
...