안드로이드 잠금화면 만드는 중 궁금한 것이 있습니다..

조회수 2638회

foreground서비스를 이용해서 죽지않는 서비스를 많들었구여,

브로드캐스트 리시버를 이용해서 화면이 꺼지면 기본잠금화면을 없애고 제가만든 잠금화면(액티비티)을 생성해주었습니다.

그런데 , 화면을 껏다키면 기본잠금화면이 0.5초~1초정도 보인뒤에 제가 만든 잠금화면이 나타납니다

그리고 제가만든 잠금화면을 해제하면 기본잠금화면이 여전히 잇습니다..

뭔가 기본잠금화면 해제 구현에 문제있는거 같은데 잘 못찾겠습니다..

매니페스트에 < uses-permission android:name="android.permission.DISABLE_KEYGUARD" />도 등록해놧습니다

제가만든 잠금화면(액티비티)에는

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

라고 onCreate에 써놧습니다..

브로드캐스트 리시버는 다음과 같습니다.. 뭐가 문제일까요?..

public class ScreenReceiver extends BroadcastReceiver {

    private KeyguardManager km = null;
    private KeyguardManager.KeyguardLock keyLock = null;
    private TelephonyManager telephonyManager = null;
    private boolean isPhoneIdle = true;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {

            if (km == null)
                km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);

            if (keyLock == null)
                keyLock = km.newKeyguardLock(Context.KEYGUARD_SERVICE);

            if(telephonyManager == null){
                telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
                telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
            }

            if(isPhoneIdle) {

                disableKeyguard();

                Intent i = new Intent(context, Activity1_1.class);
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);
            }
        }
    }

    public void reenableKeyguard() {
        keyLock.reenableKeyguard();
    }

    public void disableKeyguard() {
        keyLock.disableKeyguard();
    }

    private PhoneStateListener phoneListener = new PhoneStateListener(){
        @Override
        public void onCallStateChanged(int state, String incomingNumber){
            switch(state){
                case TelephonyManager.CALL_STATE_IDLE :
                    isPhoneIdle = true;
                    break;
                case TelephonyManager.CALL_STATE_RINGING :
                    isPhoneIdle = false;
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK :
                    isPhoneIdle = false;
                    break;
            }
        }
    };
}

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)