我要求禁用锁定屏幕并将锁定屏幕类型设置为“无”。我的设备已植根(可以使用SU权限运行)+可以作为具有系统权限的系统应用程序运行(在/ system / app下)。
我尝试了一些无用的事情。
尝试1
这似乎已弃用且无效。
KeyguardManager manager = (KeyguardManager) this.getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = manager.newKeyguardLock("abc");
lock.disableKeyguard();
尝试2
这也不起作用。
/data/data/com.android.providers.settings/databases/settings.db
执行以下SQL。
INSERT OR REPLACE INTO system (name, value) VALUES ('lockscreen.disabled', '1');
INSERT OR REPLACE INTO secure (name, value) VALUES ('lockscreen.disabled', '1');
尝试3
重新启动机器,但仍然没有运气。
android.provider.Settings.Secure.putLong(mContentResolver, Settings.Secure.LOCK_PATTERN_ENABLED, false);`
android.provider.Settings.Secure.putLong(mContentResolver, "lockscreen.password_type", DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);`
android.provider.Settings.Secure.putLong(mContentResolver, "lockscreen.password_type_alternate", DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
android.provider.Settings.Secure.putLong(mContentResolver, "lockscreen.disabled", true);
还有什么可以尝试吗?
请注意我不想仅在应用程序运行时禁用键盘锁。
答案 0 :(得分:13)
你可以试试这个:
adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '1' WHERE name = 'lockscreen.disabled'"
adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '0' WHERE name = 'lockscreen.password_type'"
adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '0' WHERE name = 'lockscreen.password_type_alternate'"
它适用于我扎根的Nexus 4.
答案 1 :(得分:4)
在android source中搜索了一下之后,我现在在类ChooseLockGeneric
的一个名为onPreferenceTreeClick
的函数中,它似乎在选择了解锁方法时被调用(在喜好)。
在该方法中调用updateUnlockMethodAndFinish
来设置解锁方法。因此,调用updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,true);
可能正是您想要的。
我不知道这是否符合您的需求,也不知道这是否有效(可能存在任何可见性问题或安全机制)。我只是猜测。
答案 2 :(得分:2)
你必须在AndroidManifest上声明这个uses-permission:
<uses-permission android:name="android.permission.WAKE_LOCK" />
在您的代码中:
PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock");
wakeLock.acquire();
当您的应用程序被销毁或暂停以使用以下内容释放此锁定时:
wakeLock.release();
我建议在您的活动的 onResume()中调用获取,并在 onPause()中调用发布 强>
答案 3 :(得分:2)
我按照@ByteHamster的建议尝试修改/data/system/locksettings.db,没有运气。
adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '1' WHERE name = 'lockscreen.disabled'"
然后我将locksettings.db
重命名为locksettings.db.old
并重新启动。锁屏已经消失,Android重建了locksettings.db
文件。
我在三星Galaxy S4上使用hudson.model.User。
答案 4 :(得分:1)
我知道这是一个迟到的答案,但您可以尝试命令行“locksettings set-disabled true”。
它非常适合我。
答案 5 :(得分:0)
我想探讨exilit回答。从源头上,我们终于进入了这个:
mChooseLockSettingsHelper.utils().clearLock(false);
mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled);
utils是com.android.internal.widget.LockPatternUtils
对象,我们可以通过反射得到它。
这是代码:
try{
Class lockPatternUtilsCls = Class.forName("com.android.internal.widget.LockPatternUtils");
Constructor lockPatternUtilsConstructor =
lockPatternUtilsCls.getConstructor(new Class[]{Context.class});
Object lockPatternUtils = lockPatternUtilsConstructor.newInstance(MyActivity.this);
Method clearLockMethod = lockPatternUtils.getClass().getMethod("clearLock", boolean.class);
Method setLockScreenDisabledMethod = lockPatternUtils.getClass().getMethod("setLockScreenDisabled", boolean.class);
clearLockMethod.invoke(lockPatternUtils, false);
setLockScreenDisabledMethod.invoke(lockPatternUtils, true);
Log.d(TAG, "set lock screen to NONE SUC");
}catch(Exception e){
Log.e(TAG, "set lock screen to NONE failed", e);
}
我的测试应用程序是使用平台密钥和系统应用程序签名的。我认为这是必须的。
更新: 注意到Android 6上的方法参数已更改。
答案 6 :(得分:0)
我已经在根片中实现了
以下是我的完整程序
adb push sqlite3 / sdcard / sqlite3
adb shell
苏
mount -o remount,rw / system
cp / sdcard / sqlite3 / system / xbin / sqlite3
chmod 755 / system / xbin / sqlite3
mount -o remount,ro / system
adb shell sqlite3 /data/system/locksettings.db
UPDATE locksettings SET value =&#39; 1&#39;名称=&#39; lockscreen.disabled&#39;
下载该文件答案 7 :(得分:0)
使用adb shell locksettings clear --old xxxx
立即解除锁屏锁定(即使手机处于锁定状态)
xxxx
是图案编号,请参见下图。
示例:locksettings clear --old 1236
要再次设置模式,请使用:locksettings set-pattern 1236
用法:
locksettings set-pattern [--old OLD_CREDENTIAL] NEW_PATTERN
locksettings set-pin [--old OLD_CREDENTIAL] NEW_PIN
locksettings set-password [--old OLD_CREDENTIAL] NEW_PASSWORD
locksettings clear [--old OLD_CREDENTIAL]
locksettings verify [--old OLD_CREDENTIAL]
locksettings set-disabled DISABLED
locksettings get-disabled