一、在Manifest.xml中声明权限(推荐)
添加权限声明
在`AndroidManifest.xml`文件中添加以下权限声明:
```xml
```
这种方法会在安装应用时提示用户授权,避免运行时权限问题。
注意事项
- 仅适用于需要持续保持屏幕开启的场景(如音乐播放器、游戏等)。
- 需配合`FLAG_KEEP_SCREEN_ON`标志位使用。
二、在代码中动态控制屏幕状态
使用`FLAG_KEEP_SCREEN_ON`
在Activity的`onCreate`方法中添加以下代码:
```java
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
```
此方法不会在安装时提示权限,但需注意释放锁:
```java
@Override
protected void onDestroy() {
super.onDestroy();
if (mWakeLock != null) {
mWakeLock.release();
}
}
```
适用于需要临时保持屏幕开启的场景。
使用`PowerManager`获取休眠锁
通过`PowerManager`类获取部分唤醒锁,需成对出现:
```java
private PowerManager mPowerManager;
private WakeLock mWakeLock;
private void acquireWakeLock() {
if (mWakeLock == null) {
mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = mPowerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
getClass().getCanonicalName()
);
mWakeLock.acquire();
}
}
private void releaseWakeLock() {
if (mWakeLock != null) {
mWakeLock.release();
mWakeLock = null;
}
}
@Override
protected void onResume() {
super.onResume();
acquireWakeLock();
}
@Override
protected void onPause() {
super.onPause();
releaseWakeLock();
}
```
适用于需要在Activity生命周期中精确控制屏幕状态的场景。
三、注意事项
权限滥用风险
长期禁止休眠会消耗电池,建议仅在必要时使用,并通过`onPause`释放锁。
系统级限制
部分手机(如荣耀系列)允许在系统设置中关闭“永不休眠”功能,需通过系统级设置关闭。
以上方法可根据具体需求选择,开发时建议优先使用Manifest权限声明,运行时再通过代码动态控制屏幕状态。