在inKeyguardRestrictedInputMode()中返回失败结果

时间:2016-09-26 13:31:10

标签: 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;
}

上述函数返回屏幕的已更正状态。但是,当我按如下方式添加一个代码时,它会出错:

 KeyguardManager.KeyguardLock
 kl = keyguardManager.newKeyguardLock("MyKeyguardLock");
 if(index.equals("1"))
        kl.disableKeyguard();
  else if(indexequals("2"))
        kl.reenableKeyguard();
  getScreenStatus();

按下按钮可以更改索引。现在,屏幕状态出现了错误。它始终返回screen_on_lock_screen,但屏幕位于screen_on_no_lock_screen。我怎么能解决我的问题?

1 个答案:

答案 0 :(得分:2)

从API级别13开始,不推荐使用KeyguardManager.NewKeyguardLock。您是否使用WindowManager.LayoutParams的FLAG_DISMISS_KEYGUARDFLAG_SHOW_WHEN_LOCKED进行了尝试。

  

此类在API级别13中已弃用。   改为使用FLAG_DISMISS_KEYGUARD和/或FLAG_SHOW_WHEN_LOCKED;这允许&gt;当应用程序移入和移出&gt;前景时,您可以无缝地隐藏键盘锁,并且不需要请求任何特殊权限。 &gt; newKeyguardLock(String)返回的句柄允许您禁用/&gt;重新启用键盘锁。

此处的链接形成Android documentation

希望它有所帮助!