2012-02-16 195 views
2

我正在做一个应用程序来锁定和解锁屏幕。我正在使用disableKeygaurd和reeanbleKeygaurd来锁定和解锁。下面的代码我用来解锁:关于屏幕锁定和解锁

if(mKeyguardLock == null){ 
    mKeyGuardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    mKeyguardLock = mKeyGuardManager.newKeyguardLock("****"); 
    mKeyguardLock.disableKeyguard(); 
} 

和用于锁:

if(mKeyguardLock != null){ 
mKeyguardLock.reenableKeyguard(); 
mKeyguardLock = null; 
} 

它工作正常。但问题是,当用户通过拖动keygaurd意外解锁屏幕(不使用我的应用程序),那么我的应用程序将不会锁定下一次屏幕..我想通过拖动keygaurd使用解锁时我的应用程序工作。我该怎么做? 在此先感谢

+0

我得到了这个问题的解决方案.. – asma 2012-02-16 11:44:43

+1

你介意张贴的解决方案,因此我们其他人能看到? – Peter 2012-06-13 04:28:52

回答

0
Try This: 

private KeyguardManager mKeyguardManager; 
private KeyguardManager.KeyguardLock mKeyguardLock; 
private static final String TAG = "ALERTLock"; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    int flags = getFlagsForVersion();   
     getWindow().addFlags(flags); 
     mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
} 

private int getFlagsForVersion() { 
     final String possibleFlags[] = new String[] { 
      "FLAG_SHOW_WHEN_LOCKED", 
      "FLAG_DISMISS_KEYGUARD", 
      "FLAG_TURN_SCREEN_ON" 
     }; 

     int flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; 
     for(String flag:possibleFlags) { 
      try { 
       Field field = WindowManager.LayoutParams.class.getField(flag); 
       int value = field.getInt(null); 
       flags |= value; 
      } 
      catch(NoSuchFieldException e) { } 
      catch(IllegalAccessException e) { } 
     } 

     return flags; 
    } 

    private synchronized void enableKeyguard() { 
     if (mKeyguardLock != null) { 
      mKeyguardLock.reenableKeyguard(); 
      mKeyguardLock = null; 
     } 
    } 

    private synchronized void disableKeyguard() { 
     if (mKeyguardLock == null) { 
      mKeyguardLock = mKeyguardManager.newKeyguardLock(TAG); 
      mKeyguardLock.disableKeyguard(); 
     } 
    }  
    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     disableKeyguard(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     disableKeyguard(); 
    } 
+0

我应该在哪里调用enableKeyguard()..? – asma 2012-02-16 09:45:34

+0

你可以使用它在你想要启用键盘锁的地方例如@Override \t protected void onDestroy(){ \t super.onDestroy(); \t enableKeyguard(); } – 2012-02-16 10:11:49

+0

@Manish:我的问题是,当用户通过拖动keygaurd意外地解锁屏幕时,我的应用下次不会锁定... – asma 2012-02-16 10:23:26