12

Używam Androida 5.0. Wersja zapewnia funkcję SmartLock, która umożliwia odblokowanie hasła/wzorca poprzez połączenie z zaufanym urządzeniem. Mam urządzenie Bluetooth o niskiej energii (BLE), które zostało zarejestrowane jako urządzenie zaufane. Chcę użyć BLE do odblokowania (tryb wzorcowy) telefonu. Będzie odblokować telefon gdy BLE i telefon są podłączone i dane są dostępne przez zdarzenieJak korzystać z interfejsu API Smart Lock w mojej aplikacji, aby odblokować tryb wzorcowy?

if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) 
// Calling unlock by the SmartLock API 

Jeśli ktoś, kto pracował z SmartLock, proszę dać mi jakieś wskazówki, aby to zrobić? Nie znalazłem w tym celu żadnego API SmartLock. enter image description here

+0

Jeśli urządzenie BLE zostanie dodane jako zaufane urządzenie w ustawieniach inteligentnego zamka, urządzenie automatycznie się odblokuje po podłączeniu telefonu do tego urządzenia BLE. To, czego szukasz, wciąż nie jest dla mnie jasne. Proszę wyjaśnij to i popraw mnie, jeśli nigdzie się nie mylę. –

+0

Masz rację. Ale ma jeszcze jeden ekran (ekran machnięcia). W tym czasie musimy przewinąć ekran, aby odblokować. Chcę to zignorować. Myślę, że Smartlock ma tę opcję – Jame

+0

Sprawdziłeś to? http: // stackoverflow.com/questions/30246425/turn-on-screen-from-receiver-service/30365638 # 30365638 –

Odpowiedz

-1

To może być trochę skomplikowane, ale Google już teraz ogromnie podał Docs o tym użytkowaniu.

Aby zażądać zapisanych poświadczeń, należy utworzyć instancję o numerze GoogleApiClient skonfigurowaną w celu uzyskania dostępu do interfejsu API poświadczeń.

mCredentialsApiClient = new GoogleApiClient.Builder(this) 
    .addConnectionCallbacks(this) 
    .enableAutoManage(this, this) 
    .addApi(Auth.CREDENTIALS_API) 
    .build(); 

Obiekt CredentialRequest określa systemy logowania, z których chcesz żądać referencji. Utwórz metodę CredentialRequest, korzystając z metody setPasswordLoginSupported do logowania na podstawie hasła oraz metody setAccountTypes() dla sfederowanych usług logowania, takich jak Google Sign-in.

mCredentialRequest = new CredentialRequest.Builder() 
    .setPasswordLoginSupported(true) 
    .setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER) 
    .build(); 

Po utworzeniu GoogleApiClient i CredentialRequest obiektów, przekazać je do metody CredentialsApi.request() aby żądać poświadczeń przechowywanych dla aplikacji.

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()); 
      } 
     } 
    }); 

Po pomyślnym żądaniu referencji użyj uzyskanego obiektu poświadczeń, aby ukończyć logowanie użytkownika do aplikacji. Użyj metody getAccountType(), aby określić typ pobranych poświadczeń, a następnie przeprowadź odpowiedni proces logowania.

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); 
     // ... 
    } 
} 
+0

Czy korzystasz już z tej funkcji? Mylę twój kod API (z hasłem) i smartlock, który używał zaufanego urządzenia – Jame

-1

Nie sądzę, że istnieje SmartLock API. Tak jak pisał w komentarzach Pravin, inteligentna blokada automatycznie wyłącza wzór po podłączeniu urządzenia.

nie próbowałem tego, ale gdy wzór jest wyłączony powinien być w stanie ominąć ekran blokady z następujących (od this answer):

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
lock.disableKeyguard(); 

Trzeba dodać uprawnienie do listy manifest:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 
+0

Próbowałem już wcześniej, ale nie może odblokować machnięcia smartlockiem – Jame

1

Nie ma zewnętrznego interfejsu API jako takiego dla SmartLock. Możesz sprawdzić Google Docs, aby uzyskać odniesienie na ten temat.

Możesz sprawdzić przykład this próbkę na GitHub i here znajdziesz samouczek na temat integracji interfejsu API Smart Lock w swojej aplikacji.

+0

Jeśli dobrze rozumiem, smartlock, który mi dajesz różni się od smartlock w moim pytaniu. Uruchomiłem SmartLock w linku wcześniej, ale jest to tylko dla e-maila, a nie dla trybu wzoru – Jame

+0

@ user8430 No tak. Ten samouczek ma na celu przybliżenie idei Smartlock. Podobnie jak poprzednie odpowiedzi, możesz użyć klawisza 'KeyguardManager' do odblokowania urządzenia. – AlphaQ

+0

Myślę, że wcześniej tego nie wypróbowałeś. Proszę przeprowadzić eksperyment przed odpowiedzią – Jame

Powiązane problemy