Android-화면이 아닌 휴대 전화 잠금 해제 이벤트 감지
사용자가 휴대 전화를 잠금 해제 할 때이를 감지하는 방법이 있습니까? ACTION_SCREEN_ON
및 ACTION_SCREEN_OFF
에 대해 알고 있지만 전원 버튼을 눌렀을 때 화면이 켜지거나 꺼질 때 실행되는 것 같지만 실제로는 메뉴 버튼을 눌렀을 때 전화가 잠금 해제되면 실행되지 않습니다.
활동이 실행되는 동안 잠금 해제 / 잠금을 감지하려고하는데 잠금이 해제되면 활동을 재개하려고합니다.
수행 할 작업은 다음과 같습니다.
잠금 해제 이벤트를 감지하고 휴대 전화가 잠금 해제되었을 때 활동에서 무언가를하고 싶다고 가정 해 보겠습니다. ACTION_SCREEN_ON, ACTION_SCREEN_OFF 및 ACTION_USER_PRESENT에 대한 브로드 캐스트 수신기가 있습니다.
ACTION_SCREEN_ON이 실행될 때 활동의 onResume이 호출됩니다. 핸들러를 만들고 ACTION_USER_PRESENT를 기다립니다. 해고되면 활동에 원하는 것을 구현하십시오.
크레딧은 CommonsWare의 답변으로 이동합니다. Android- 장치가 잠금 해제되면 어떻게됩니까?
잠시이 작업을 수행 한 후 "android.intent.action.USER_PRESENT"작업에 BroadcastReceiver를 등록하는 것이 가장 좋은 방법이라는 것을 알게되었습니다.
"브로드 캐스트 작업 : 장치가 깨어 난 후 사용자가있을 때 전송됩니다 (예 : 키 가드가 사라진 경우)."
사용자가 실제로 잠금을 해제했을 때 잠기지 않았을 때 화면을 켠 경우를 구별하려면 KeyguardManager를 사용하여 보안 설정을 확인합니다.
코드 예 :
활동에 다음을 추가하십시오.
registerReceiver(new PhoneUnlockedReceiver(), new IntentFilter("android.intent.action.USER_PRESENT"));
그런 다음이 클래스를 사용하십시오.
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
}
}
}
public class PhoneUnlockedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)){
Log.d(TAG, "Phone unlocked");
}else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){
Log.d(TAG, "Phone locked");
}
}
}
이 문장으로 수신자 등록
receiver = new PhoneUnlockedReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_PRESENT);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver, filter);
테스트하지 않았지만 다음을 시도하십시오.
- 기다
ACTION_SCREEN_ON
립니다. - (After screen is on,) Wait for ACTION_MAIN with category CATEGORY_HOME (Which launches the home screen) - This is probably what is sent after the phone gets unlocked.
The 1st step is needed to filter out regular HOME key presses.
ReferenceURL : https://stackoverflow.com/questions/3446202/android-detect-phone-unlock-event-not-screen-on
'programing' 카테고리의 다른 글
함수가 비동기인지 어떻게 알 수 있습니까? (0) | 2021.01.14 |
---|---|
CopyOnWriteArrayList는 어떻게 스레드로부터 안전합니까? (0) | 2021.01.14 |
Objective-C에서 연산자를 오버로드 할 수 있습니까? (0) | 2021.01.14 |
MySQL "주요 효율성"이란? (0) | 2021.01.14 |
두 개의 출력 목록 (즉, 목록의 분할)을 얻는 filter ()와 동등한 파이썬 (0) | 2021.01.14 |