You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExoPlayer 2 播放视频时如何防止屏幕变暗?

解决ExoPlayer 2播放视频时防止屏幕变暗的问题

嘿,我来帮你搞定这个需求!要让ExoPlayer播放视频时屏幕保持常亮,有两种简单又靠谱的方法,完全不需要复杂的权限操作,我给你详细说说:

方法一:给Activity设置屏幕常亮标记

这是最直接的方式,不需要依赖播放器的回调,在Activity初始化时就能搞定:

  • 在onCreate方法中,给当前Window添加FLAG_KEEP_SCREEN_ON标记,系统就会在Activity处于前台时保持屏幕常亮。

代码示例:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);
    
    // 开启屏幕常亮
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
    // 初始化ExoPlayer
    SimpleExoPlayerView playerView = findViewById(R.id.video_view);
    SimpleExoPlayer player = new SimpleExoPlayer.Builder(this).build();
    playerView.setPlayer(player);
    
    // 加载播放媒体的逻辑...
}

如果需要在播放结束/暂停时自动关闭常亮,可以监听ExoPlayer的播放状态来动态调整:

player.addListener(new Player.EventListener() {
    @Override
    public void onPlaybackStateChanged(int playbackState) {
        if (playbackState == Player.STATE_ENDED || playbackState == Player.STATE_IDLE) {
            // 播放结束/闲置时,关闭屏幕常亮
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        } else if (playbackState == Player.STATE_READY) {
            // 准备播放/正在播放时,开启屏幕常亮
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        }
    }
});

方法二:使用ExoPlayerView自带的常亮设置

这个方法更贴合播放器场景,SimpleExoPlayerView提供了专门的setKeepScreenOn方法,会自动关联播放状态,不用你手动监听:

代码示例:

SimpleExoPlayerView playerView = findViewById(R.id.video_view);
// 开启后,播放器会在播放时保持屏幕常亮,暂停/结束时自动关闭
playerView.setKeepScreenOn(true);

注意事项

别用WakeLock来实现这个需求!WakeLock需要额外申请android.permission.WAKE_LOCK权限,而且如果忘记释放会导致不必要的耗电,上面两种方法都是更轻量、更安全的选择。

内容的提问来源于stack exchange,提问作者Calin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:47:22