Android MediaPlayer:info/warning(703,0)、info/warning(702,0)、info/warning(701,0)、ProtocolException当尝试从随机位置搜索时

Android MediaPlayer:info/warning(703,0)、info/warning(702,0)、info/warning(701,0)、ProtocolException当尝试从随机位置搜索时,android,android-mediaplayer,protocolexception,Android,Android Mediaplayer,Protocolexception,我使用mediaplayer从url传输mp3音频,现在我可以播放音乐,但当我在随机位置选择seekbar时,音乐停止,出现以下异常和警告 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.Protocol

我使用mediaplayer从url传输mp3音频,现在我可以播放音乐,但当我在随机位置选择seekbar时,音乐停止,出现以下异常和警告

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
            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

                }

            }
        };
    }
。谁能帮我解决我的问题。多谢各位

            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

                }

            }
        };
    }
我的代码是:

            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显示:

            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

                }

            }
        };
    }
试试这个:

            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

                }

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

您确定正在播放的媒体支持搜索吗?@zombie:这是来自服务器的远程url。我如何检查这一点?通常我通过尝试在浏览器(pc)中下载来检查它,如果它显示了完整的尺寸,那么它很可能支持seeking@zombie:是的,它是支持性的。我现在用浏览器检查了一下。