Savita
Savita

Reputation: 747

How to set Looping conditions for VideoView in Android

I want to set looping conditions and for the VideoView. This is what I am trying to achieve.

  1. Video Starts and finishes if Edit Text is not selected.
  2. If Video Start and EditText is selected then Video is set to looping.
  3. If the user types into the EditText and presses button submit then looping set to false and the activity closes after video completes.
  4. If EditText loses selection the video activity finishes on complete.

Here is the code but it's not working for me

 mVideoView.setVideoPath(phone);
        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()

                                         {
                                             @Override
                                             public void onPrepared(final MediaPlayer mp) {
                                                 mVideoView.start();
                                                 if (mVideoView.isPlaying()) {
                                                     mp.setLooping(false);


                                                 }
                                             }
                                         }

        );

        CommentBox.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mp) {
                            mp.setLooping(true);
                        }
                    });
                }
            }
        });

        mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener()

                                           {
                                               @Override
                                               public void onCompletion(MediaPlayer mp1) {
                                                   finish();
                                               }
                                           }

        );

Upvotes: 0

Views: 919

Answers (1)

akhil Rao
akhil Rao

Reputation: 1169

Problem is you have not called mediaplayer.start() after you set loop in onCompletionListener().

I executed the below code and it works fine here

Solution:

Create public bundle type of variable

 b=new Bundle();
    b.putBoolean("repeat", false);
    v.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.ak));

    v.requestFocus();

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (txt.getText().toString().length() > 0) {
                b.putBoolean("repeat", false);
          }
      }
  });

txt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean has) {
    if (has) {
        b.putBoolean("repeat", true);

    }
}
});

v.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
    if (b.getBoolean("repeat") == true) {
        mediaPlayer.setLooping(true);
        mediaPlayer.start();
           Toast.makeText(getApplicationContext(),String.valueOf(b.getBoolean("repeat")),Toast.LENGTH_LONG).show();
    } else {
        mediaPlayer.setLooping(false);
        mediaPlayer.stop();
        Toast.makeText(getApplicationContext(),String.valueOf(b.getBoolean("repeat")),Toast.LENGTH_LONG).show();
    }
}
});
      v.start();

Upvotes: 1

Related Questions