android - samsung - ¿Cómo usar Smart Lock API en mi aplicación para desbloquear el modo de patrón?
smart lock no funciona (3)
Estoy usando Android 5.0. La versión proporciona la función SmartLock que permite desbloquear la contraseña / patrón al conectarse con un dispositivo confiable. Tengo un dispositivo bluetooth de baja energía (BLE) que se registró como dispositivo de confianza. Quiero usar el BLE para desbloquear (modo de patrón) el teléfono. Desbloqueará el teléfono cuando el BLE y el teléfono estén conectados y los datos estén disponibles para el evento
if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action))
// Calling unlock by the SmartLock API
Si alguien que trabajó con SmartLock, por favor dame alguna orientación para hacerlo? No encontré ninguna API de SmartLock para hacerlo.
Gracias a todos
Puede ser un poco complicado, pero Google ya proporcionó enormes documentos sobre este uso.
Para solicitar credenciales almacenadas, debe crear una instancia de GoogleApiClient
configurada para acceder a la API de credenciales.
mCredentialsApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.enableAutoManage(this, this)
.addApi(Auth.CREDENTIALS_API)
.build();
Un objeto CredentialRequest especifica los sistemas de inicio de sesión desde los que desea solicitar credenciales. Cree una CredentialRequest
utilizando el método setPasswordLoginSupported
para el inicio de sesión basado en contraseña y el método setAccountTypes()
para servicios de inicio de sesión federados, como el inicio de sesión de Google.
mCredentialRequest = new CredentialRequest.Builder()
.setPasswordLoginSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
.build();
Una vez que haya creado los objetos GoogleApiClient
y CredentialRequest
, GoogleApiClient
al método CredentialsApi.request()
para solicitar las credenciales almacenadas para su aplicación.
Auth.CredentialsApi.request(mCredentialsClient, mCredentialRequest).setResultCallback(
new ResultCallback<CredentialRequestResult>() {
@Override
public void onResult(CredentialRequestResult credentialRequestResult) {
if (credentialRequestResult.getStatus().isSuccess()) {
// See "Handle successful credential requests"
onCredentialRetrieved(credentialRequestResult.getCredential());
} else {
// See "Handle unsuccessful and incomplete credential requests"
resolveResult(credentialRequestResult.getStatus());
}
}
});
En una solicitud de credencial exitosa, use el objeto Credential resultante para completar el inicio de sesión del usuario en su aplicación. Use el método getAccountType()
para determinar el tipo de credenciales recuperadas, luego complete el proceso de inicio de sesión apropiado.
private void onCredentialRetrieved(Credential credential) {
String accountType = credential.getAccountType();
if (accountType == null) {
// Sign the user in with information from the Credential.
signInWithPassword(credential.getId(), credential.getPassword());
} else if (accountType.equals(IdentityProviders.GOOGLE)) {
// The user has previously signed in with Google Sign-In. Silently
// sign in the user with the same ID.
// See https://developers.google.com/identity/sign-in/android/
GoogleSignInOptions gso =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.setAccountName(credential.getId())
.build();
OptionalPendingResult<GoogleSignInResult> opr =
Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
// ...
}
}
No creo que haya una API SmartLock. Como dijo Pravin en los comentarios, el bloqueo inteligente desactivará automáticamente el patrón cuando el dispositivo esté conectado.
No lo he intentado, pero una vez que se deshabilita el patrón, debe poder pasar por alto la pantalla de bloqueo con lo siguiente (de esta respuesta ):
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
Deberá agregar un permiso a su manifiesto:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>