Привет всем, у меня возникла проблема с закрытием моего PlaybackVideoFragment, который расширяет VideoSupportFragment, после того как я нажал кнопку возврата на моем пульте.
Код, который я должен срабатывать при нажатии кнопки назад, следующий ( playerView.addOnUnhandledKeyEventListener):
@OptIn(markerClass = UnstableApi.class)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainFragment.movie = (Movie) getActivity().getIntent().getSerializableExtra(MOVIE);
long cacheMaxSize = 90 * 1024 * 1024;
File cacheRoot = getContext().getExternalCacheDir() != null ? getContext().getExternalCacheDir() : getContext().getCacheDir();
File cacheDir = new File(cacheRoot, "media");
SimpleCache simpleCache = new SimpleCache(cacheDir, new LeastRecentlyUsedCacheEvictor(cacheMaxSize), new StandaloneDatabaseProvider(getContext()));
DefaultHttpDataSource.Factory httpDataSourceFactory = new DefaultHttpDataSource.Factory();
CacheDataSource.Factory cacheDataSourceFactory = new CacheDataSource.Factory()
.setCache(simpleCache)
.setUpstreamDataSourceFactory(httpDataSourceFactory)
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR);
ProgressiveMediaSource.Factory mediaSourceFactory = new ProgressiveMediaSource.Factory(cacheDataSourceFactory);
DefaultLoadControl loadControl = new DefaultLoadControl.Builder()
.setBufferDurationsMs(8 * 1024, 64 * 1024, 50, 1024)
.build();
ExoPlayer player = new ExoPlayer.Builder(getContext())
.setMediaSourceFactory(mediaSourceFactory)
.setLoadControl(loadControl)
.build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
playerView.addOnUnhandledKeyEventListener((v, event) -> {
//Handle BACK button
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
{
getActivity().finish();
//playerView.hideController(); //Hide mediaController,according to your needs, you can also called here onBackPressed() or finish()
}
return true;
});
}
playerView.setUseController(true);
player.setPlayWhenReady(false);
playerView.setPlayer(player);
Uri uri = Uri.parse(MainFragment.movie.getVideoUrl());
MediaItem mediaItem = MediaItem.fromUri(uri);
player.setMediaItem(mediaItem);
player.addListener(pbl());
player.setRepeatMode(Player.REPEAT_MODE_OFF);
player.prepare();
player.play();
}
Это возвращает меня на главный экран, но я все еще могу видеть видео, воспроизводимое в фоновом режиме (я слышу звук, но не вижу видео).Я называю видеофрагмент следующим образом:
Привет всем, у меня возникла проблема с [b]закрытием[/b] моего [b]PlaybackVideoFragment[/b], который расширяет [b]VideoSupportFragment[/b], после того как я нажал [b]кнопку возврата[/b] на моем пульте. Код, который я должен [b]срабатывать[/b] при нажатии кнопки [b]назад[/b], следующий ( [b]playerView.addOnUnhandledKeyEventListener[/b]): [code]@OptIn(markerClass = UnstableApi.class) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
ExoPlayer player = new ExoPlayer.Builder(getContext()) .setMediaSourceFactory(mediaSourceFactory) .setLoadControl(loadControl) .build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { playerView.addOnUnhandledKeyEventListener((v, event) -> { //Handle BACK button if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { getActivity().finish(); //playerView.hideController(); //Hide mediaController,according to your needs, you can also called here onBackPressed() or finish() } return true; }); }
Uri uri = Uri.parse(MainFragment.movie.getVideoUrl()); MediaItem mediaItem = MediaItem.fromUri(uri);
player.setMediaItem(mediaItem); player.addListener(pbl()); player.setRepeatMode(Player.REPEAT_MODE_OFF); player.prepare(); player.play(); } [/code] Это возвращает меня на главный экран, но я все еще могу видеть видео, воспроизводимое в фоновом режиме (я слышу звук, но не вижу видео).Я называю видеофрагмент следующим образом: [code]public class PlaybackActivity extends FragmentActivity { public static ProgressBar mProgressBar; public static PlayerView playerView; public static Activity activity;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);