2016-04-07 18 views
1

Şu anda bir Music Player'ı akıtan basit bir uygulama tasarlamaya çalışıyorum. Şarkının URL'si var ve aşağıdaki gibi MediaPlayer'u ayarlıyorum. Her şey ilk şarkıdan de sorun yok, ama bir başka şarkı oynarken, program taklit çökmesini değil, ama hiçbir şey oynuyor ve aşağıdaki hatayı alıyorum duyuyorum:MediaPlayer hata kodu (-38,0) getDuration

E/MediaPlayer: Attempt to call getDuration without a valid mediaplayer 
E/MediaPlayer: error (-38, 0) 
E/MediaPlayer: Error (-38,0) 

PlayerService.java

public class MusicPlayerService extends Service { 
    private SongItem mSong; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     mSong = ListSong.getListSong().get(ListSong.getSelectedItem()); 
     registerLocalFilter(); 
     playMedia(); 
     return START_STICKY; 
    } 

    private void playMedia() { 
     if (handler == null) { 
      thread = new Thread(new Runnable() { 
       @Override 
       public void run() { 
        Looper.prepare(); 
        handler = new Handler(); 
        handler.post(playAudioFromURL); 
        Looper.loop(); 
       } 
      }); 
      thread.start(); 
     } else { 
      handler.post(playAudioFromURL); 
     } 
    } 

    private Runnable playAudioFromURL = new Runnable() { 
     @Override 
     public void run() { 
      if (mediaPlayer != null) { 
       mediaPlayer.release(); 
      } 
      mediaPlayer = new MediaPlayer(); 
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      try { 
       mediaPlayer.setDataSource(mSong.getSongUrl()); 
       mediaPlayer.setOnPreparedListener(onPreparedListener); 
       mediaPlayer.setOnCompletionListener(onCompletionListener); 
       mediaPlayer.setOnSeekCompleteListener(onSeekCompleteListener); 
       mediaPlayer.setOnErrorListener(onErrorListener); 
       mediaPlayer.prepareAsync(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       Log.w(TAG, "playAudioFromURL: " + e.toString()); 
      } catch (IllegalArgumentException ex) { 
       Log.w(TAG, "playAudioFromURL: " + ex.toString()); 
      } catch (IllegalStateException ex) { 
       Log.w(TAG, "playAudioFromURL: " + ex.toString()); 
      } 
     } 
    }; 


    private MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      ListSong.setPlaying(true); 
      sendLoadComplete(); 
      updateTimer(); 
      mp.start(); 
     } 
    }; 
} 

ben onPrepared() içinde yazma mp.start() ve Media Player called in state 0, error (-38,0) de çözüm gibi mediaPlayer.prepareAsync(); kullanarak var ama işe yaramıyor.

Lütfen yardım edin!

cevap

0

MediaPlayer mediaPlayer.reset(); içinde mediaPlayer.setDataSource(mSong.getSongUrl()); önce sorununuzu çözebilir.

+0

** may **? o zaman yorumda olmalı dostum! – Gattsu