私は簡単なプレイヤーアクティビティを持っています:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context="com.epix.presentation.player.PlayerActivity">
<com.google.Android.exoplayer2.ui.SimpleExoPlayerView
Android:id="@+id/video_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
</Android.support.constraint.ConstraintLayout>
ビデオが実行されているとき、画面が暗くなります。画面を再び明るくするには、画面をタップする必要があります。 Android:keepScreenOn="true"
を設定してみましたが、画面がオフにならないので、もちろん暗くなります。
画面が暗くなるのを防ぐ方法はありますか?
これが誰かを助けることを願っています。
動画の再生とバッファリング中にのみsetKeepScreenOn
を設定し、動画が一時停止/再生されていない/エラーが発生したときに画面をスリープ状態にできるようにします。
playerView = exoPlayerLayout.findViewById(R.id.exo_player_view);
player = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(context),
new DefaultTrackSelector(), new DefaultLoadControl());
player.addListener(new PlayerEventListener());
PlayerEventListener
private class PlayerEventListener implements Player.EventListener {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_IDLE || playbackState == Player.STATE_ENDED ||
!playWhenReady) {
playerView.setKeepScreenOn(false);
} else { // STATE_IDLE, STATE_ENDED
// This prevents the screen from getting dim/lock
playerView.setKeepScreenOn(true);
}
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {}
@Override
public void onLoadingChanged(boolean isLoading) {}
@Override
public void onRepeatModeChanged(int repeatMode) { }
@Override
public void onPlayerError(ExoPlaybackException error) { }
@Override
public void onPositionDiscontinuity() { }
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) { }
}
必要に応じてsetKeepScreenOn
を変更する場合は、再生状態を確認してください ここ 。
最も簡単なのは、ConstraintLayout要素にtrueの値を持つkeepScreenOn属性を含めることです。
Android:keepScreenOn="true"
たとえば、アクティビティのonCreateメソッドで、これをプログラムで実行することを選択できます。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Developer.Android.comに画面をオンに保つ トピックに関するページ があります。
問題が発生した場合は、ダイアログフラグメントなどでビデオビューが暗くなります。これを属性で使用できます:
app:surface_type="texture_view"
私のためのその仕事