新建Activity,并在activity的onCreate()方法中设置flags
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD //解锁
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON //保持屏幕不息屏
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);//点亮屏幕
if (Build.VERSION.SDK_INT > 27) {
setShowWhenLocked(true);
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
WindowManager.LayoutParams params = getWindow().getAttributes();
//低调模式, 会隐藏不重要的状态栏图标,https://blog.csdn.net/QQsongQQ/article/details/89312763
params.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE;
getWindow().setAttributes(params);
setContentView(R.layout.activity_call);
}
在AndroidManifest.xml中配置activity,并加入锁屏显示权限
android:screenOrientation="portrait"
android:launchMode="singleInstance"/>
启动Activity
wakeUpAndUnlock(getApplicationContext());
startActivity(new Intent(getApplication(), YunXinCallInActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP));
public void wakeUpAndUnlock(Context context) {
//屏锁管理器
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");
//解锁
kl.disableKeyguard();
//获取电源管理器对象
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
//获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, BuildConfig.APPLICATION_ID + ":bright");
//点亮屏幕
wl.acquire();
//释放
wl.release();
}
注意:覆盖锁屏显示这个功能在某些手机上需要“锁屏显示”权限,目前只能用户自己开启,无法通过代码申请。
附上国内各大厂商跳转到权限的代码
public class PermissionUtil {
/**
* Build.MANUFACTURER判断各大手机厂商品牌<