2016-09-26 3 views
12

私は電話の画面の4つの状態を判断する機能を持っています:スクリーンオン、スクリーンオフ、スクリーンオンロック、スクリーンオンロックなし。私の関数はinKeyguardRestrictedInputMode()で失敗した結果を返します

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; 
} 

です。上記の関数は、画面の修正された状態を返します。しかし、次のように1つ以上のコードを追加するとエラーが発生します。

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

インデックスを変更するには、ボタンを押します。今、画面の状態が間違っています。画面はscreen_on_no_lock_screenですが、常にscreen_on_lock_screenを返します。どうすれば問題を解決できますか?

+0

コードを追加できますか?どのクラスとメソッドに2番目のコードスニペットが含まれていますか? – Vall0n

答えて

2

KeyguardManager.NewKeyguardLockをAPIレベル13以降使用しないでください:WindowManager.LayoutParamsのFLAG_DISMISS_KEYGUARDFLAG_SHOW_WHEN_LOCKEDで試してみましたか?

このクラスは、APIレベル13 使用FLAG_DISMISS_KEYGUARDで非推奨および/または代わりFLAG_SHOW_WHEN_LOCKEDました。アプリケーションがフォアグラウンドに出入りする際にキーガードをシームレスに隠すことができ、特別な権限を要求する必要はありません。 > newKeyguardLock(String)から返されたハンドル。キーガードを無効にしたり、有効にしたりすることができます。

ここで、リンクはAndroid documentationを形成します。

希望すると助かります!

関連する問題