我想控制設備上的啓用/禁用鍵盤鎖。 爲此,我使用Android SDK的DevicePolicyManager和KeyguardLock API。Android - 如何完全禁用鍵盤鎖
下面是我的實現來管理這樣的:
public class DeviceLocker {
private static DeviceLocker instance;
public static synchronized DeviceLocker getInstance(Context context) {
if(instance==null) {
instance = new DeviceLocker(context);
}
return instance;
}
private Context context;
private KeyguardLock lock;
private DeviceLocker(Context context) {
this.context = context;
}
public void lock() {
lock(true);
}
public void lock(boolean lockNow) {
getLock().reenableKeyguard();
DevicePolicyManager devicePolicyManager = getDevicePolicyManager();
if(devicePolicyManager==null) {
return;
}
LocalStorage storage = LocalStorage.from(context);
boolean result = devicePolicyManager.resetPassword(storage.getPassword(),
DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
if(lockNow) {
devicePolicyManager.lockNow();
}
storage.setDeviceLocked(true);
}
public void unlock() {
DevicePolicyManager devicePolicyManager = getDevicePolicyManager();
if(devicePolicyManager==null) {
return;
}
devicePolicyManager.resetPassword("",0);
getLock().disableKeyguard();
LocalStorage.from(context).setDeviceLocked(false);
}
private KeyguardLock getLock() {
if(lock==null){
KeyguardManager kgManager = (KeyguardManager)context.getSystemService(Activity.KEYGUARD_SERVICE);
lock = kgManager.newKeyguardLock(Context.KEYGUARD_SERVICE);
}
return lock;
}
private DevicePolicyManager getDevicePolicyManager() {
DevicePolicyManager devicePolicyManager =
(DevicePolicyManager)context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName deviceAdmin = new ComponentName(context, WatchGuardDeviceAdminReceiver.class);
LocalStorage storage = LocalStorage.from(context);
if(!devicePolicyManager.isAdminActive(deviceAdmin)) {
return null;
}
if(!storage.isPasswordSet()) {
UIUtils.showMessage(context, R.string.password_not_set);
return null;
}
devicePolicyManager.setPasswordQuality(deviceAdmin,DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
return devicePolicyManager;
}
}
這對於屏幕的鎖定工作正常,但解鎖fucntionality工作的一些問題: 有時它的工作原理,因爲我想(完全刪除任何類型的鍵盤保護屏),但有時會顯示「解鎖與幻燈片」鍵盤保護屏。
你知道這裏有什麼問題嗎?如何使它工作穩定(至少在所有情況下,要麼顯示「解鎖滑動」或完全移除鍵盤鎖)?
在此先感謝您的幫助。
編輯
只是想指出的是,我的解決方案作品,但問題是,它的工作不穩定(有時完全刪除鍵盤鎖,有時顯示「幻燈片」鍵盤鎖)。 而且我用它不僅僅是在顯示某些活動時禁用鍵盤鎖,而是控制共同設備的鎖定/解鎖,所以我在Service中使用此代碼,因此我不能撥打getWindow().addFlags(..)
因爲我沒有窗口應用。
只是想知道或許任何人處理這種不穩定的行爲。
這是什麼LocalStorage類?你是從某種Web框架做到這一點的?另外,你有沒有得到一個工作解決方案?我期待在DPC中實現這一點。 – Keilaron