Использовать блокировку экрана в моем приложении

Можно ли использовать настройки безопасности по умолчанию, которые пользователь установил для телефона, в качестве механизма блокировки или входа в систему для моего приложения? Я имею в виду, например, когда мы перезагружаем телефон, он запрашивает пароль или шаблон телефона.

Возможно ли так же, как я могу использовать пароль 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, чтобы пользователь не мог открыть действие без проверки!

Другие вопросы по тегам