use*_*460 12 android android-service android-powermanager
我有一个功能来确定手机屏幕的四种状态:屏幕打开,屏幕关闭,屏幕打开锁定,屏幕打开无锁定.我的功能是
private KeyguardManager keyguardManager;
public String getScreenStatus()
{
String sreen_State="unknown";
keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
if (pm.isInteractive()) {
sreen_State="screen_on";
if(!keyguardManager.inKeyguardRestrictedInputMode()) {
sreen_State="screen_on_no_lock_screen";
}else{
Log.i(TAG, "screen_on_lock_screen");
sreen_State="screen_on_lock_screen";
}
}
else {
sreen_State="screen_off";
}
}
else if(Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT_WATCH){
if(pm.isScreenOn()){
sreen_State="screen_on";
if(!keyguardManager.inKeyguardRestrictedInputMode()) {
Log.i(TAG, "screen_on_no_lock_screen");
sreen_State="screen_on_no_lock_screen";
}else{
Log.i(TAG, "screen_on_lock_screen");
sreen_State="screen_on_lock_screen";
}
}
else {
mIsScreenOn=false;
sreen_State="screen_off";
}
}
return sreen_State;
}
Run Code Online (Sandbox Code Playgroud)
上述功能返回屏幕的校正状态.但是,当我再添加一个代码时,它有错误,如下所示:
KeyguardManager.KeyguardLock
kl = keyguardManager.newKeyguardLock("MyKeyguardLock");
if(index.equals("1"))
kl.disableKeyguard();
else if(indexequals("2"))
kl.reenableKeyguard();
getScreenStatus();
Run Code Online (Sandbox Code Playgroud)
按下按钮可以改变索引.现在,屏幕状态出现了错误.它总是返回screen_on_lock_screen,虽然屏幕在screen_on_no_lock_screen.我怎么能解决我的问题?
usingKeyguardManager.NewKeyguardLock自 API Level 13 起已被弃用。您是否尝试过使用WindowManager.LayoutParamsFLAG_DISMISS_KEYGUARD和FLAG_SHOW_WHEN_LOCKEDWindowManager.LayoutParams?
该类在 API 级别 13 中已弃用。请改用 FLAG_DISMISS_KEYGUARD 和/或 FLAG_SHOW_WHEN_LOCKED ;这允许您在应用程序移入和移出前台时无缝隐藏键盘保护,并且不需要请求任何特殊权限。> newKeyguardLock(String) 返回的句柄允许您禁用/ >重新启用键盘保护。
这里是Android 文档的链接。
希望能帮助到你!