通話終了時に画面ロック(スワイプ、パターン、パスワード、ピン)を自動でロックしたい。
たとえば、デバイスがパターンロックと画面ライトをオフに設定している場合、画面ライトがオンで UI が画面に表示されているときに Skype 通話を取得すると、パスワードが渡されます。通話を切断した後、そのシステム ロックをリセットします。
以下のコードでロックをバイパスすることに成功しました:
許可 :
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
デバイスのロックを解除するためのコード:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if(!pm.isScreenOn()) {
sendNotification("CALL_STATE_IDLE_SRC_OFF");
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock lock = keyguardManager.newKeyguardLock(TAG);
lock.disableKeyguard();
wl.acquire();
wl.release();
} else {
sendNotification("CALL_STATE_IDLE_SRC_ON");
}
Intent intent = new Intent(this, Name_of_Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
| Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
+ WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+ WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
intent.putExtra("Call", "true");
getApplicationContext().startActivity(intent);
しかし、通話が終了したときにデバイスをロックできませんでした。
ロック装置のコード:
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock lock = keyguardManager.newKeyguardLock(TAG);
lock.reenableKeyguard();