2013-05-13 46 views
3

我在我的活动中使用Keyguard Manager来解锁设备,但它的行为奇怪。我测试了两个设备,Nexus的工作正常,但在三星Galaxy S中,它不工作。键盘保护程序管理器不能正常工作

我的代码是:

PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE); 

WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP),"mini"); 

wakeLock.acquire(); 

KeyguardManager keyguardManager = (KeyguardManager) ctx. 

getSystemService(Context.KEYGUARD_SERVICE); 

KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("mini"); 

keyguardLock.disableKeyguard(); 

任何人都可以帮忙吗?

+0

您是否找到了解决方案?我有类似的问题 – asheinfeld 2013-05-30 14:30:13

+0

@asheinfeld遐我找到一个解决方案 – Meenal 2013-05-31 05:04:17

回答

4

我发现这个解决方案,这里mContext是你的活动的上下文,我在活动之外使用它。

if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.FROYO) { 
      // only for gingerbread and newer versions 
      ((Activity) mContext).getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
      ((Activity) mContext).getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
      ((Activity) mContext).getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

      KeyguardManager manager (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); 
      KeyguardLock lock = manager.newKeyguardLock("abc"); 
      lock.disableKeyguard(); 

    } else { 

     KeyguardManager km = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); 
     KeyguardLock keyguardLock = km.newKeyguardLock("TAG"); 
     ((Activity) mContext).getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
     ((Activity) mContext).getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

     keyguardLock.disableKeyguard(); 
     PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); 
     WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
        | PowerManager.ACQUIRE_CAUSES_WAKEUP 
        | PowerManager.ON_AFTER_RELEASE 
        | PowerManager.SCREEN_BRIGHT _WAKE_LOCK, "MyWakeLock"); 

     wakeLock.acquire(); 
    } 
+0

谢谢,会试试这个! – asheinfeld 2013-05-31 17:58:00

+0

版本检查是否正确?这似乎是说,如果版本是<= FROYO做**新**版本的代码?难道不是相反吗? – 2013-11-05 22:28:57

+0

在PowerManager之前使用KeyguardManager是否安全? – 2014-11-12 22:26:41