4

I am using Exo-Player.My video is playing fine but when i press back button and exit from activity my video keeps on playing in background.I don't how to stop it from playing when activity is finished.Please help

This is my code for exo player in recycler view adaptor

 String my_date = data.get(position).getCreated_at();
    String returneDate = setDateAndTime(my_date);
    String img_url = data.get(position).getUser().getProfileUrl();
    String videoUrl = data.get(position).getFile_url();

    if (videoUrl != null) {
        uri = Uri.parse(videoUrl);
    } else {
        holder.videoFrame.setVisibility(View.GONE);
    }

    holder.userVideoStatus.setText(data.get(position).getText());
    holder.userNameVideoStatus.setText((CharSequence) data.get(position).getUser().getName());
    holder.timeVideoStatus.setText(returneDate);

    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
    player = ExoPlayerFactory.newSimpleInstance(activity, trackSelector);

    DefaultHttpDataSourceFactory defaultHttpDataSourceFactory = new DefaultHttpDataSourceFactory("exo player");
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    final MediaSource mediaSource = new ExtractorMediaSource(uri, defaultHttpDataSourceFactory, extractorsFactory, null, null);


    holder.playVideo.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {

            holder.playVideo.setVisibility(View.GONE);
            holder.userVideoUpdate.setPlayer(player);
            player.prepare(mediaSource);
            player.setPlayWhenReady(true);
            holder.volumeUp.setVisibility(View.VISIBLE);

            return true;
        }
    });
vagish dixit
  • 65
  • 1
  • 9
  • videoView stops with videoView.stopPlayback(); dont know with exoplayer. isn't there any stop method ,try player(dot). to search for stop method – seon Jan 31 '18 at 15:55
  • Checkout this may helps for Jetpack Compose: https://stackoverflow.com/a/71977304/3974530 – InsaneCat Apr 23 '22 at 06:15

3 Answers3

6

Ok Pavel B. gave the right answer but I am elaborating and making it clearer...

Adapter

public class ChatsAdapter extends RecyclerView {

    public SimpleExoPlayer exoPlayer; // Do this at top

}

Activity

public class TestActivity extends AppCompatActivity {

    private ChatsAdapter chatsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        chatsAdapter = new ChatsAdapter();

    }

    @Override
    protected void onPause() {

        super.onPause();
        pausePlayer(chatsAdapter.exoPlayer);

    }

    @Override
    protected void onStop() {

        super.onStop();
        pausePlayer(chatsAdapter.exoPlayer);

    }

    @Override
    protected void onDestroy() {

        super.onDestroy();
        releaseExoPlayer(chatsAdapter.exoPlayer);
    }

    @Override
    protected void onResume() {

        super.onResume();
        startPlayer(chatsAdapter.exoPlayer);
    }

    public static void startPlayer(SimpleExoPlayer exoPlayer) {

        if (exoPlayer != null) {
            exoPlayer.setPlayWhenReady(true);

        }
    }

    public static void pausePlayer(SimpleExoPlayer exoPlayer) {

        if (exoPlayer != null) {
            exoPlayer.setPlayWhenReady(false);

        }
    }

    public static void releaseExoPlayer(SimpleExoPlayer exoPlayer) {

        if (exoPlayer != null) {
            exoPlayer.release();

        }

    }
}
DragonFire
  • 3,722
  • 2
  • 38
  • 51
4

in Your adapter - make player a public class member.

in Your activivty onStop() add: yourAdapter.player.stopPlayback();

Pavel B.
  • 805
  • 10
  • 13
  • based on your answer I tried this : https://stackoverflow.com/a/60134634/3904109 but it just stops the first item in the recycler view.. can you please show what is wrong with my code.. – DragonFire May 11 '20 at 11:39
0

If you want to stop exoplayer , upgrade the latest Version of exoplayer and then try using

implementation 'com.google.android.exoplayer:exoplayer:2.14.2'

I tried using playerview.OnPause but that doesnt work .

player.setPlayWhenReady(true) - Used to Pause the player player.setPlayWhenReady(false) - Used to Resume player .

Make sure you get the same instance of exoplayer everywhere , better if you can make a singleton class.

Sanjay
  • 117
  • 4
  • 13