退出活动android时停止播放播放器视频

时间:2018-01-31 15:42:03

标签: android

我正在使用Exo-Player。我的视频播放正常,但当我按下后退按钮并退出活动时,我的视频继续在后台播放。我不知道如何在活动结束时停止播放。请帮忙

这是我在回收站视图适配器中的exo播放器的代码

 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;
        }
    });

4 个答案:

答案 0 :(得分:2)

Ok Pavel B.给出了正确的答案,但我正在详细说明并使其更加清晰...

适配器

public class ChatsAdapter extends RecyclerView {

    public SimpleExoPlayer exoPlayer; // Do this at top

}

活动

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();

        }

    }
}

答案 1 :(得分:1)

在你的适配器中 - 让玩家成为公共类成员。

在您的活动onStop()中添加: yourAdapter.player.stopPlayback();

答案 2 :(得分:0)

在您的活动中,找到onBackPress()方法并添加player.stop();

        @Override
        public void onClick(View v) {
            onBackPressed(); 

            player.stop();  //stop exoplayer video
        }

答案 3 :(得分:0)

如果你想停止 exoplayer ,升级最新版本的 exoplayer 然后尝试使用

实现'com.google.android.exoplayer:exoplayer:2.14.2'

我尝试使用 playerview.OnPause 但那不起作用。

player.setPlayWhenReady(true) - 用于暂停播放器 player.setPlayWhenReady(false) - 用于恢复播放器。

确保你在任何地方都得到相同的 exoplayer 实例,如果你能创建一个单例类就更好了。

相关问题