我正在使用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;
}
});
答案 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 实例,如果你能创建一个单例类就更好了。