programing

Android-화면이 아닌 휴대 전화 잠금 해제 이벤트 감지

sourcetip 2021. 1. 14. 23:43
반응형

Android-화면이 아닌 휴대 전화 잠금 해제 이벤트 감지


사용자가 휴대 전화를 잠금 해제 할 때이를 감지하는 방법이 있습니까? ACTION_SCREEN_ONACTION_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

반응형