2016-11-15 1 views
0

Im streaming audio mp3 d'une URL en utilisant MediaPlayer, maintenant je suis capable de jouer de la musique, mais quand je sélectionne seekbar à une position aléatoire, la musique s'arrête et l'exception ci-dessous et l'avertissement se produitAndroid MediaPlayer: info/avertissement (703, 0), info/avertissement (702, 0), info/warning (701, 0), ProtocolException lorsque vous tentez de chercher à partir d'une position aléatoire

W/MediaPlayer: info/warning (703, 0) 
W/MediaPlayer: info/warning (702, 0) 
W/MediaPlayer: info/warning (701, 0) 
W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 

. Quelqu'un peut-il m'aider à résoudre mon problème. Je vous remercie.

Mon code est:

  private ImageView play, forward, backward; 
      private MediaPlayer mediaPlayer; 
      private boolean playing = false; 
      private ProgressDialog dialog; 
      private String mp3link; 
      private SeekBar seekbar; 
      private Handler handler = new Handler(); 
      private int mediaPos; 
      private int mediaMax; 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
       final String url =""; 
       initWidgets(); 

      } 

     private void initWidgets() { 
      mp3link = "http://loc8app.com/church/uploads/audio/749928ad6fcb7b1aceefdf03bd7a9465.mp3"; 
      play = (ImageView) findViewById(R.id.control); 
      seekbar = (SeekBar) findViewById(R.id.seekBar); 
    //  forward = (ImageView) findViewById(R.id.playeer_forward); 
    //  backward = (ImageView) findViewById(R.id.playeer_back); 
      mediaPlayer = new MediaPlayer(); 
      play.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        playFunction(); 
       } 
      }); 

      seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

       @Override 
       public void onStopTrackingTouch(SeekBar seekBar) { 

       } 

       @Override 
       public void onStartTrackingTouch(SeekBar seekBar) { 

       } 

       @Override 
       public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
        if(mediaPlayer != null && fromUser){ 
         mediaPlayer.seekTo(progress); 
        } 
       } 
      }); 
     } 


     private void playFunction() { 
      if (!playing) { 
       try { 
        dialog = ProgressDialog 
          .show(MainActivity.this, 
            "", 
            getString(com.root5solutions.music.R.string.buffering), 
            true); 
        dialog.setCancelable(true); 
        dialog.show(); 
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
        mediaPlayer.setDataSource(mp3link); 
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

         @Override 
         public void onPrepared(MediaPlayer mp) { 
          play.setBackgroundResource(R.drawable.pause); 
          playing = true; 
          //this is new 
          mediaPos = mp.getCurrentPosition(); 
          mediaMax = mp.getDuration(); 

          seekbar.setMax(mediaMax); 
          seekbar.setProgress(mediaPos); 
          //this line is the error 
          handler.removeCallbacks(moveSeekBarThread); 
          handler.postDelayed(moveSeekBarThread, 100); 

          mp.start(); 
          dialog.dismiss(); 
         } 
        }); 
        mediaPlayer.prepareAsync(); 

       } catch (Exception e) { 
        e.printStackTrace(); 
        dialog.dismiss(); 
       } 
      } else { 
       play.setBackgroundResource(R.drawable.play); 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
       playing = false; 
      } 
     } 

     @Override 
     public void onBackPressed() { 
      super.onBackPressed(); 
      if (mediaPlayer.isPlaying()) { 
       handler.removeCallbacks(moveSeekBarThread); 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
      } 
     } 

     private Runnable moveSeekBarThread = new Runnable() { 

      public void run() { 
       if (mediaPlayer.isPlaying()) { 
        int mediaPos_new = mediaPlayer.getCurrentPosition(); 
        int mediaMax_new = mediaPlayer.getDuration(); 
        seekbar.setMax(mediaMax_new); 
        seekbar.setProgress(mediaPos_new); 

        handler.postDelayed(this, 1000); // Looping the thread after 1 second 

       } 

      } 
     }; 
    } 

Logcat montre:

W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:48.343 23176-23236/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:48.974 23176-23192/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:49.384 23176-23700/com.root.music W/MediaPlayer: info/warning (703, 0) 
11-15 14:15:49.384 23176-23700/com.root.music W/MediaPlayer: info/warning (701, 0) 
11-15 14:15:49.584 23176-23394/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:50.375 23176-23193/com.root.music W/MediaPlayer: info/warning (703, 0) 
11-15 14:15:50.375 23176-23236/com.root.music W/MediaPlayer: info/warning (702, 0) 
11-15 14:15:51.176 23176-23700/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:51.777 23176-23236/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:52.387 23176-23192/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:52.988 23176-23394/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:53.588 23176-23193/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:54.189 23176-23700/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
11-15 14:15:54.809 23176-23236/com.root.music W/MediaHTTPConnection: readAt 2230281/32768 => java.net.ProtocolException 
+0

pourrait aider http://stackoverflow.com/a/ 14083415/6689101 – zombie

+0

êtes-vous sûr que t Le média que vous jouez est-il en train de chercher du soutien? – zombie

+0

@zombie: c'est une URL distante du serveur. Comment puis-je vérifier cela? –

Répondre

1

essayez ceci:

mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() { 
    @Override 
    public void onSeekComplete(MediaPlayer arg0) { 
     Log.d(TAG, "onSeekComplete() current pos : " + arg0.getCurrentPosition()); 
     SystemClock.sleep(200); 
     mediaPlayer.start(); 
    } 
});