Android - comment faire pour complètement désactiver le verrouillage du clavier
Je veux contrôler l'activation/la désactivation du verrouillage de l'appareil.
Pour le faire, je suis en utilisant DevicePolicyManager et KeyguardLock API du SDK Android.
Ci-dessous est ma mise en œuvre pour gérer ce:
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;
}
}
Il fonctionne ok concernant le verrouillage de l'écran, mais déverrouiller fucntionality fonctionne avec quelques questions:
parfois, cela fonctionne comme je le veux(supprime complètement tout type de verrouillage de l'écran), mais parfois il montre "Déverrouiller avec toboggan" verrouillage de l'écran.
Savez-vous quel est le problème ici? Comment faire fonctionner stable (au moins dans tous les cas, soit d'afficher "Déverrouiller pour le slide" ou complètement supprimer le verrouillage du clavier)?
Merci d'avance pour l'aide.
MODIFIER
Veux juste faire remarquer que ma solution fonctionne, mais le problème est qu'il fonctionne instable (parfois supprime le verrouillage du clavier complètement et montrent parfois "slide" verrouillage du clavier).
Et aussi je l'utilise non seulement pour désactiver le verrouillage du clavier tout en montrant une certaine activité, mais de contrôle de verrouillage/déverrouillage de l'appareil en commun, donc j'utilise ce code dans le Service, donc je ne peux pas appeler getWindow().addFlags(..)
cause je n'ai pas la Fenêtre pour appliquer.
Juste vous demandez-vous peut-être quelqu'un a traité ce comportement instable.
OriginalL'auteur kowalski | 2014-02-18
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, il n'est pas universellement possible, sinon ce serait une faille de sécurité importante.
Sur un non-enracinée de téléphone, plus vous pouvez faire est de rejeter non-sécurisé clavier ou de montrer votre application au-dessus de l'sécurisé clavier.
Voici un combo pour ce faire:
Sur un téléphone enracinée, vous pouvez essayer de supprimer sécurisé clavier (bien que vous pouvez avoir à redémarrer l'appareil avant qu'il va en fait plus loin).
Voici une liste déroulante pour que (n'ai pas essayé moi-même, mais je suis sûr que plusieurs "déverrouiller votre téléphone" applications dans le Play Store utilisez cette astuce)
Je vous recommande de l'essayer celui-là par le biais de la bad en premier. Aussi, voici un fil XDA avec un peu plus d'infos sur ce: http://forum.xda-developers.com/showthread.php?t=1800799
OriginalL'auteur Ivan Bartsov
Vous devez ajouter ce code:
Créer LockService avec:
En fait, je ne sais pas pourquoi ,mais
k1.disableKeyguard();
ne fonctionne que dans le Service.Vous avez besoin de ne déverrouiller ,droit? Voir le code ci-dessus (onCreate methond) . Vous pouvez créer de nouvelles activités , DismissLockActivity par exemple et quand vous avez besoin de rejeter le verrouillage du clavier juste de commencer l'activité et de la finition . J'ai maintenant ce vilain hack ,mais dans mon application cela fonctionne parfaitement.
OriginalL'auteur dooplaye
OriginalL'auteur Swapnil
je vous conseille d'utiliser les indicateurs de la fenêtre dismiss_keyguard ou show_when_locked si vous avez une fenêtre qui doit venir sur le dessus de l'écran de verrouillage droit au réveil.
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED
la façon dont vous utilisez ce est comme suit (appelé dans onCreate avant de régler la mise en page)
OriginalL'auteur Hassaan Rabbani