一、界面布局文件顶层添加keepScreenOn属性
android:keepScreenOn="true"
二、Window中设置flag
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
以上两种方法均不需要申请权限,也是Android官方推荐的做法。
三、持有WakeLock(已经不推荐的做法)
先申请权限:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
通过PowerManager获取WakeLock后,在onResume以及onPause执行响应操作:
package com.example.note4xtest;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.os.PowerManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
private PowerManager.WakeLock mWakeLock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
if (powerManager != null) {
mWakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
}
}
@Override
protected void onResume() {
super.onResume();
if (mWakeLock != null) {
mWakeLock.acquire();
}
}
@Override
protected void onPause() {
super.onPause();
if (mWakeLock != null) {
mWakeLock.release();
}
}
}
WakeLock相关的FLAG:
-
PARTIAL_WAKE_LOCK:保持CPU运转,屏幕和键盘灯可能是关闭的
-
SCREEN_DIM_WAKE_LOCK:保持CPU运转,允许保持屏幕显示但可能是灰的(非高亮),允许键盘灯关闭
-
SCREEN_BRIGHT_WAKE_LOCK:保持CPU运转,允许保持屏幕高亮显示,允许关闭键盘灯
-
FULL_WAKE_LOCK:保持CPU运转,保持屏幕高亮显示,键盘灯也保持亮度