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
相关产品推荐
相关产品推荐

