Ответ 1
Для SmartLock нет внешнего API как такового. Вы можете проверить Google Документы для справки.
Вы можете проверить этот образец на GitHub и здесь вы найдете руководство по интеграции API смарт-блокировки в своем приложении.
Я использую Android 5.0. Версия предоставляет функцию SmartLock, которая позволяет разблокировать пароль/шаблон, подключив его к доверенному устройству. У меня есть устройство с низкой энергией Bluetooth (BLE), которое зарегистрировано как доверенное устройство. Я хочу использовать BLE для разблокировки (режим шаблона) телефона. Он разблокирует телефон, когда BLE и телефон подключены, и данные доступны в событии
if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action))
// Calling unlock by the SmartLock API
Если кто-нибудь, кто работал с SmartLock, пожалуйста, дайте мне несколько советов, чтобы сделать это? Я не нашел никакого API-интерфейса SmartLock для этого.
Спасибо всем
Для SmartLock нет внешнего API как такового. Вы можете проверить Google Документы для справки.
Вы можете проверить этот образец на GitHub и здесь вы найдете руководство по интеграции API смарт-блокировки в своем приложении.
Это может быть немного сложнее, но Google уже предоставил Docs об этом использовании.
Чтобы запросить хранимые учетные данные, вы должны создать экземпляр GoogleApiClient
, настроенный для доступа к API учетных данных.
mCredentialsApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.enableAutoManage(this, this)
.addApi(Auth.CREDENTIALS_API)
.build();
Объект CredentialRequest указывает системы входа, из которых вы хотите запросить учетные данные. Постройте a CredentialRequest
с помощью метода setPasswordLoginSupported
для входа на основе пароля и метода setAccountTypes()
для федеративных служб входа в систему, таких как вход в систему Google.
mCredentialRequest = new CredentialRequest.Builder()
.setPasswordLoginSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
.build();
После того, как вы создали объекты GoogleApiClient
и CredentialRequest
, передайте их методу CredentialsApi.request()
, чтобы запросить учетные данные, сохраненные для вашего приложения.
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());
}
}
});
При успешном запросе учетных данных используйте полученный объект Credential для завершения входа пользователя в ваше приложение. Используйте метод getAccountType()
, чтобы определить тип полученных учетных данных, затем выполните соответствующий процесс входа.
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);
// ...
}
}
Я не думаю, что есть API SmartLock. Как сказал Правин в комментариях, смарт-блокировка автоматически отключит шаблон при подключении устройства.
Я не пробовал это, но как только шаблон отключен, вы можете обойти экран блокировки со следующим (от этого ответа):
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
Вам нужно будет добавить разрешение на манифест:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>