2011-11-09 6 views
5

Używam Androida Administration API i mieć DeviceAdminReceiver i zastępują następujące funkcje:Mając problemy z odbieraniem ACTION_PASSWORD_SUCCEEDED i ACTION_PASSWORD_FAILED zamiary

@Override 
public void onEnabled(Context context, Intent intent) 
{ 
    System.out.println("Admin On======================");  
} 

@Override 
public void onDisabled(Context context, Intent intent) 
{ 
    System.out.println("Admin Off======================"); 
} 

@Override 
public void onPasswordFailed(Context context, Intent intent) 
{ 
    System.out.println("PW Bad============================"); 
} 

@Override 
public void onPasswordSucceeded(Context context, Intent intent) 
{ 
    System.out.println("PW Good===========================");  
} 

@Override 
public void onPasswordChanged(Context context, Intent intent) 
{ 
    System.out.println("Changed PW=======================");   
} 

On włączona, wyłączona i PW zmienił pracę, jednak hasło powiodło i udało się zrobić nie. Dziwnie, oni losowo pracują raz na jakiś czas, a następnie przestają działać. Czy coś jest nie tak z moim kodem, czy może to być problem z interfejsem API?

Odbiornik w AndroidMaifest

<receiver android:name="AdminReciever" 
      android:label="Administration" 
      android:permission="android.permission.BIND_DEVICE_ADMIN" android:enabled="true"> 
      <meta-data android:name="android.app.device_admin" 
       android:resource="@xml/adminpolicies" /> 
      <intent-filter> 
       <action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/> 
       <action android:name="android.app.action.ACTION_PASSWORD_FAILED"></action> 
       <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"></action> 
       <action android:name="android.app.action.ACTION_PASSWORD_CHANGED"></action> 

      </intent-filter> 
</receiver> 

STAŁY

okazało się problemów, wydaje się nie zostało udokumentowane. Ustawiłem minimalną długość hasła za pomocą dpm.setPasswordMinimumLength(). Czynność wprowadzania hasła nie wywołuje intencji PASSWORD_FAILED, jeśli wprowadzone hasło jest mniejsze niż minimalna długość. Również PASSWORD_SUCCEEDED odpala tylko wtedy, gdy złe hasło (PASSWORD_FAILED) zostało wprowadzone przed pomyślnym. Tak więc dwa pomyślne hasła z rzędu nie wywołają drugiej intencji.

+0

jak to rozwiązałeś? Ustawiam minimalną długość na 0, i nadal nie otrzymuję nieudanego rzutu. Myślę, że jakiś inny komponent ma ustawiony min min, w tym przypadku nie mogę nic zrobić. jakieś pomysły? –

+0

Tak Loncannon proszę, poprowadź nas, jak rozwiązałeś ten problem? Jak zdobyć hasło za każdym razem, gdy wprowadzono hasło, albo źle, albo dobrze. Utkwiłem:/ – Salmaan

+0

To było dawno temu, więc nie mogę sobie przypomnieć, gdybym go "naprawił". Powyższy problem dotyczył projektu badawczego, który został ukończony dawno temu. Domyślam się, że FIXED nie był najlepszym tytułem do wykorzystania, raczej zorientowałem się, dlaczego pojawiło się jakieś dziwne zachowanie. – Ioncannon

Odpowiedz

0

Możesz skorzystać z Android.intent.action.USER_PRESENT. Ta intencja zostanie uruchomiona za każdym razem, gdy użytkownik odblokuje urządzenie. Możesz zarejestrować odbiornik, który przechwyci android.intent.action.USER_PRESENT, aby wykryć zdarzenia odblokowania urządzenia.

0

Bardzo późna odpowiedź tutaj, ale miałem ten sam problem, a twoja edycja "Naprawiono" pomogła mi zrozumieć dlaczego.

Tak jak mówisz, nie jest to bardzo dobrze udokumentowane, więc może być dość mylące. Opcja documentation sugeruje, że każde niepowodzenie hasła spowoduje wywołanie komendy onPasswordFailed.

ACTION_PASSWORD_FAILED

Action wysyłane do administratora urządzenia, gdy użytkownik wpisze nieprawidłowy profil urządzenia lub hasło wyzwanie. W tym momencie możesz sprawdzić liczbę nieudanych prób podania hasła za pomocą DevicePolicyManager.getCurrentFailedPasswordAttempts(). Zasadniczo będziesz obsługiwać to w onPasswordFailed (Context, Intent, UserHandle).

Jednak to nie jest prawda. Komenda onPasswordFailed wydaje się być wywoływana tylko wtedy, gdy hasło/PIN/wzorzec jest zgodny z domyślną polityką . Różni się to od minimalnej długości hasła.

Mimo że nie mogę znaleźć żadnej dokumentacji określającej domyślne zasady, wydaje się, że jest to 4 cyfry (PIN), 4 znaki (hasło) lub 4 punkty (wzór). Wszystko, co jest mniej niż te, nie spowoduje wywołania.

Dla przykładu ustaw minimalną długość na 6 i ustaw hasło na 123ABC. Teraz spróbuj zalogować się przy użyciu następujących: -

  • 123 - onPasswordFailed nie nazywa
  • 123A - onPasswordFailed nazywa

Nicea projekt mały tester here można spróbować z.

Mimo że prawdopodobnie dobrze i prawdziwie przestawiliście się z tego problemu, ktoś inny może uzyskać pewną jasność.

Pozdrawiam.