首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyguardManager未能解锁kitkat屏幕

KeyguardManager未能解锁kitkat屏幕
EN

Stack Overflow用户
提问于 2014-11-12 22:44:39
回答 2查看 1.1K关注 0票数 1

我注意到Android非常有趣的行为,我无法解释。我使用以下代码唤醒电话并禁用密钥保护:

代码语言:javascript
复制
        PowerManager.WakeLock mFullWakelock = mPowerManager.newWakeLock(
                (PowerManager.SCREEN_BRIGHT_WAKE_LOCK |
                        PowerManager.FULL_WAKE_LOCK |
                        PowerManager.ACQUIRE_CAUSES_WAKEUP),
                LOCK_TAG
        );

        mFullWakelock.acquire();

        KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
        KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock(LOCK_TAG);

        keyguardLock.disableKeyguard();

假设有一个周期的->disable密钥保护(以编程方式)->press电源按钮(手动)-> wake ->禁用密钥保护。循环工作很好,直到我手动按下主页按钮,而手机的钥匙保护被禁用。在那之后,手机确实会醒过来,但是键盘保护不再以编程方式被禁用。任何想法我都会感激的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-13 11:28:28

问题是,每当用户按home按钮或打开通知时,密钥锁就会过期。因此,无论何时发生这种情况,您都必须创建一个新的密钥锁。

我使用了这个解决方案,效果很好:https://stackoverflow.com/a/14519861/4098821

票数 0
EN

Stack Overflow用户

发布于 2016-05-04 12:42:01

我有同样的问题,我解决了它使用反射和我的应用程序作为系统签名的应用程序。

下面是代码:

代码语言:javascript
复制
try{
                                   Class lockPatternUtilsCls = Class.forName("com.android.internal.widget.LockPatternUtils");
                                   Constructor lockPatternUtilsConstructor = 
                                       lockPatternUtilsCls.getConstructor(new Class[]{Context.class});
                                   lockPatternUtilsConstructor.setAccessible(true);
                                   Object lockPatternUtils = lockPatternUtilsConstructor.newInstance(ChangeDeviceLockMode.this);
                                   Method clearLockMethod = lockPatternUtils.getClass().getMethod("clearLock", boolean.class);
                                   clearLockMethod.setAccessible(true);
                                   Method setLockScreenDisabledMethod = lockPatternUtils.getClass().getMethod("setLockScreenDisabled", boolean.class);
                                   setLockScreenDisabledMethod.setAccessible(true);
                                   clearLockMethod.invoke(lockPatternUtils, false);
                                   setLockScreenDisabledMethod.invoke(lockPatternUtils, true);     
                                   Toast.makeText(ChangeDeviceLockMode.this,"none", Toast.LENGTH_LONG).show();  
                           }catch(Exception e){
                               System.err.println("An InvocationTargetException was caught!");
                                                   Throwable cause = e.getCause();
                                                   Toast.makeText(ChangeDeviceLockMode.this,"none--"+cause, Toast.LENGTH_LONG).show();  
                               Toast.makeText(ChangeDeviceLockMode.this,"none--"+e, Toast.LENGTH_LONG).show();  
                           }

您还需要在清单中添加权限。

代码语言:javascript
复制
android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" />

此权限要求应用程序进行系统签名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26898136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档