web-dev-qa-db-ja.com

Exoplayer 2は、ビデオ再生時に画面が暗くなるのを防ぎます

私は簡単なプレイヤーアクティビティを持っています:

<?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"を設定してみましたが、画面がオフにならないので、もちろん暗くなります。

画面が暗くなるのを防ぐ方法はありますか?

11
Calin

これが誰かを助けることを願っています。

動画の再生とバッファリング中にのみ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を変更する場合は、再生状態を確認してください ここ

25
Vignesh Sundar

最も簡単なのは、ConstraintLayout要素にtrueの値を持つkeepScreenOn属性を含めることです。

Android:keepScreenOn="true"

たとえば、アクティビティのonCreateメソッドで、これをプログラムで実行することを選択できます。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Developer.Android.comに画面をオンに保つ トピックに関するページ があります。

6
marcbaechinger

問題が発生した場合は、ダイアログフラグメントなどでビデオビューが暗くなります。これを属性で使用できます:

app:surface_type="texture_view"

私のためのその仕事

1
wiz165