Использовать блокировку экрана в моем приложении
Можно ли использовать настройки безопасности по умолчанию, которые пользователь установил для телефона, в качестве механизма блокировки или входа в систему для моего приложения? Я имею в виду, например, когда мы перезагружаем телефон, он запрашивает пароль или шаблон телефона.
Возможно ли так же, как я могу использовать пароль Android по умолчанию или шаблон, заданный пользователем, для входа в мое приложение?
Моя цель - обойти усилия по разработке и использовать какой-то стандартный способ аутентификации, не заставляя пользователя запоминать другой новый пароль.
ПРИМЕЧАНИЕ. Я знаю, что могу заблокировать экран программным способом. Но вместо этого я хочу использовать блокировку в качестве проверки перед выполнением любой критической операции. (Точно так же, как в настройках запрашивается пароль перед перезагрузкой телефона.)
3 ответа
На самом деле, есть API именно для этого, использующий KeyguardManager.
Сначала получите Keyguard SystemService:
KeyguardManager km = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
А затем запросите намерение аутентификации, используя:
Intent i = km.createConfirmDeviceCredentialIntent(title,description);
начать это намерение, используя startActivityForResult(Intent, int)
и проверить на RESULT_OK
если пользователь успешно завершает задачу.
Это для уровня API 21. Предыдущие версии могут работать с KeyguardLock
,
Я просто следую за @agi с небольшим улучшением,
public class MainActivity extends AppCompatActivity {
private static int CODE_AUTHENTICATION_VERIFICATION=241;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
KeyguardManager km = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
if(km.isKeyguardSecure()) {
Intent i = km.createConfirmDeviceCredentialIntent("Authentication required", "password");
startActivityForResult(i, CODE_AUTHENTICATION_VERIFICATION);
}
else
Toast.makeText(this, "No any security setup done by user(pattern or password or pin or fingerprint", Toast.LENGTH_SHORT).show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK && requestCode==CODE_AUTHENTICATION_VERIFICATION)
{
Toast.makeText(this, "Success: Verified user's identity", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "Failure: Unable to verify user's identity", Toast.LENGTH_SHORT).show();
}
}
}
Обновление 2022, июнь: (minSdk: 24, targetSdk: 32,compileSdk: 32) Улучшение кода к ответу @Abhijit Kurane...
Замените startActivityForResult на startActivityIfNeeded...(на данный момент #startActivityForResult устарел)
Для начинающих: поместите finish() в оператор else метода onActivityResult, чтобы пользователь не мог открыть действие без проверки!