마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

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

0 추천

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;
            }
        }
    };
}

 

똑돌이 (530 포인트) 님이 2016년 11월 17일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...