首页 > 解决方案 > Android 音频播放器不像 WhatsApp 音频播放器那样播放

问题描述

当我播放音频播放器和播放之间我播放第二个音频第一个音频进度条和计时器接收器与第二个音频播放器等等。请对此提供帮助。**所有音频都加载到recyclerview中。**我希望像whatsapp这样的音频播放器一个接一个地播放音频,并且进度条彼此之间没有接收器

  if (message.getFileType() == MessageFileType.AUDIO)
        {
            mediaUrl=message.getFile();

            Log.d("tag","mediaURL"+mediaUrl);
            Uri video = Uri.parse(mediaUrl);

                holder.BtnPlayMusic.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        holder.BtnPlayMusic.setImageResource(R.drawable.pause_button_red);

                        if(flag){

                            mPlayer = MediaPlayer.create(mContext, video);
                            flag = false;
                        }
                      if ( mPlayer.isPlaying())
                        {
                            holder.MusicSeekBar.setProgress(0);
                            mPlayer.stop();

                            flag=true;
                            // mPlayer.reset();
                            holder.BtnPlayMusic.setImageResource(R.drawable.play_button_red);

                                mPlayer = MediaPlayer.create(mContext, video);
                                flag = false;

                            mPlayer.start();
                            holder.BtnPlayMusic.setImageResource(R.drawable.pause_button_red);
                            getDurationTimer(holder);
                            holder.MusicSeekBar.setMax(mPlayer.getDuration()/1000);
                            getSeekBarStatus(holder);
                         }
                       else
                        {
                                    mPlayer.start();
                                    getDurationTimer(holder);
                            holder.BtnPlayMusic.setImageResource(R.drawable.pause_button_red);
                            holder.MusicSeekBar.setMax(mPlayer.getDuration()/1000);
                                    getSeekBarStatus(holder);


                            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                                @Override
                                public void onCompletion(MediaPlayer mp) {
                                    holder.BtnPlayMusic.setImageResource(R.drawable.play_button_red);
                                    flag=true;
                                    holder.MusicSeekBar.setProgress(0);

                                }}); }}
                });

                holder.BtnStopMusic.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                            mPlayer.stop();
                        mPlayer.reset();
                            flag=true;
                            // mPlayer.reset();
                            holder.BtnPlayMusic.setImageResource(R.drawable.play_button_red);


                    }
                });

        }

 //Creating duration time method
    public void getDurationTimer(MessageViewHolder holder){
        final long minutes=(mPlayer.getDuration()/1000)/60;
        final int seconds= (int) ((mPlayer.getDuration()/1000)%60);
        holder.MusicTime.setText(minutes+ "0:0"+seconds);


    }



    //creating a method for seekBar progress
    public void getSeekBarStatus(MessageViewHolder holder){
        thread=new Thread(new Runnable() {
           @Override
           public void run() {
               int currentPosition = 0;
               int total = mPlayer.getDuration();
               holder.MusicSeekBar.setMax(total);
               while (mPlayer != null && currentPosition < total && flag==false) {
                   try {
                       Thread.sleep(1000);

                           currentPosition = mPlayer.getCurrentPosition();


                   } catch (InterruptedException e) {
                       return;
                   }
                   holder.MusicSeekBar.setProgress(currentPosition);
               }
           }
       });
        thread.start();

        holder.MusicSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            int progress=0;
            @Override
            public void onProgressChanged(final SeekBar seekBar, int ProgressValue, boolean fromUser) {
                if (fromUser) {
                    mPlayer.seekTo(ProgressValue);//if user drags the seekbar, it gets the position and updates in textView.
                    progress=ProgressValue;
                }
                final long mMinutes=(ProgressValue/1000)/60;//converting into minutes
                final int mSeconds=((ProgressValue/1000)%60);//converting into seconds
                holder.MusicTime.setText(mMinutes+"0:0"+mSeconds);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                mPlayer.seekTo(progress);
            }
        });
    }

标签: androidandroid-audiomanager

解决方案


推荐阅读