Po straggling z tym na chwilę, Znalazłem, że najlepszym sposobem, aby to zrobić, to zarejestrować BroadcastReceiver na „android.intent.action.USER_PRESENT " akcja.
"Działanie transmisji: wysłane, gdy użytkownik jest obecny po przebudzeniu urządzenia (np. Po zniknięciu klawisza)."
Aby odróżnić przypadki, w których użytkownik włączył swój ekran, gdy nie był zablokowany, gdy faktycznie został odblokowany, należy użyć KeyguardManager, aby sprawdzić ustawienia zabezpieczeń. Przykładem
Kod:
Dodaj to do swojej aktywności:
registerReceiver(new PhoneUnlockedReceiver(), new IntentFilter("android.intent.action.USER_PRESENT"));
Następnie użyj tej klasy:
public class PhoneUnlockedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
KeyguardManager keyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardSecure()) {
//phone was unlocked, do stuff here
}
}
}
Ale czy to zadziała na wszystkich telefonach? Na przykład w menu myTouch naciśnięcie przycisku Menu odblokowuje telefon, inne telefony wymagają przesuwania się po telefonie. Czy jest coś, co może złapać wszystko? – Chris
Wierzę w to - ACTION_MAIN z kategorią CATEGORY_HOME jest definitywnie wywoływany w celu uruchomienia ekranu głównego (to jest programu uruchamiającego). Istnieje jednak wiele telefonów z systemem Android, więc nie mogę być w 100% pewny.Lepiej spróbuj i zobacz, czy to działa dla ciebie. – adamk
Przypuszczam, że zapomniałem wspomnieć o uruchomieniu działania, a gdy jest ono uruchomione, chcę zablokować/odblokować ekran i wznowić działanie po odblokowaniu. Oczekiwanie na ACTION_MAIN i CATEGORY_HOME po prostu zawiesza moją aktywność podczas odblokowywania. – Chris