Android 保持屏幕常亮方法小结

开发视频功能时,遇到了播放一段时间后屏幕自动变暗的问题,这里总结下解决方法。

方法一

如果使用的是 MediaPlayer 和 SurfaceView 的话,有一个现成的方法可以使用,setScreenOnWhilePlaying(true)。但是项目中采用的是TextureView,不支持这种方法。具体原因看下 setScreenOnWhilePlaying 的源码和 setDisplay的注释就明白了。

方法二

另一种大家比较熟悉的是使用 WAKE_LOCK
首先声明 <uses-permission android:name="android.permission.WAKE_LOCK" />这个权限,并添加以下代码,

1
2
3
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");
wakeLock.acquire();

并注意在适当的时候调用 wakelock.release()
该方法会影响电池的使用,若不及时释放会有严重的后果。官方文档建议只在必要的时候使用且保持尽量短的时间。
相比第一种方法,有点小题大做。

方法三

该方法不需要额外的权限,只需声明 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);,或者直接在布局中加上 keepScreenOn=true 即可。

1
2
3
4
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">

值得注意的是,view 的 keepScreenOn 属性只有在该 View 是 Visible 状态的时候才生效。

对比来看,方法三简单实用,就选它了。

参考