У меня есть приложение, в котором я запрашиваю у пользователя аутентификацию в моем приложении через KeyguardManager
, используя PIN .
Важно то, что у меня есть android:showOnLockScreen="true"
для моей активности в манифесте, поэтому, когда устройство заблокировано, и моя активность отображается, я нажимаю кнопку «Войти», которая вызывает showAuthenticationScreen()
Я получаю RESULT_CANCELED
в моем onActivityResult()
.
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void showAuthenticationScreen() {
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager == null) {
return;
}
Intent kgIntent = keyguardManager.createConfirmDeviceCredentialIntent(getString(R.string.nnl_kg_title), getKgPrompt());
if (kgIntent != null) {
startActivityForResult(kgIntent, KG_REQUEST_ID);
}
}
Я просмотрел системные журналы и обнаружил, что я получаю эту ошибку от BiometricService
с сообщением "Отмена с CDC" . Вот некоторая часть системных журналов.
936 936 I ActivityTaskManager: START u0 {act=android.app.action.CONFIRM_DEVICE_CREDENTIAL_WITH_USER flg=0x8080000 pkg=com.android.settings cmp=com.android.settings/.password.ConfirmDeviceCredentialActivity$InternalActivity (has extras)} from
uid 1000
11-11 10:54:53.076 936 972 D ActivityTaskManager: Top Process State changed to PROCESS_STATE_TOP_SLEEPING
11-11 10:54:53.092 936 1032 W ProcessStats: Tracking association SourceState{2c15fa1 com.android.settings/1000 Top #565108} whose proc state 1 is better than process ProcessState{54a9784 com.google.android.gms.persistent/10029 pkg=com.google.android.gms} proc st
ate 2 (9 skipped)
11-11 10:54:53.126 936 936 D BiometricService: Creating auth session. Modality: 1, cookie: 1632337634
11-11 10:54:53.127 936 936 V FingerprintService: startAuthentication(com.android.settings)
11-11 10:54:53.128 936 936 V FingerprintService: Returning cookie: 1632337634
11-11 10:54:53.128 936 936 D BiometricService: Matched cookie: 1632337634, 0 remaining
11-11 10:54:53.128 936 936 V FingerprintService: starting client AuthenticationClientImpl(com.android.settings) cookie: 1632337634/1632337634
11-11 10:54:53.135 936 936 W FingerprintService: client com.android.settings is authenticating...
11-11 10:54:53.161 936 936 D BiometricService: Cancelling from CDC
11-11 10:54:53.162 936 936 V FingerprintService: Stopping client com.android.settings, fromClient: false
11-11 10:54:53.173 936 936 W FingerprintService: client com.android.settings is no longer authenticating
11-11 10:54:53.177 936 3056 D ActivityTaskManager: Top Process State changed to PROCESS_STATE_TOP
11-11 10:54:53.195 936 936 V FingerprintService: handleError(client=com.android.settings, error = 5)
11-11 10:54:53.195 936 936 V FingerprintService: Done with client: com.android.settings
11-11 10:54:53.196 936 936 D BiometricService: Error: 5 cookie: 1632337634
11-11 10:54:53.285 936 3041 I ActivityTaskManager: Activity reported stop, but no longer stopping: ActivityRecord{9b6d8b u0 com.natigbabayev.biometricprompt/.MainActivity t1936}
Так есть ли какое-то решение для этого? Могу ли я попросить пользователей пройти аутентификацию с помощью PIN-кода, даже если устройство заблокировано? Заранее спасибо, ребята.