ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 잠금화면을 만드는 과정
    프로젝트/영어단어 잠금화면 2021. 12. 7. 16:09

    영어단어 잠금화면의 핵심 기능인 잠금화면을 만드는 과정을 서술한다.

     

    구현할 기능은 다음과 같다.

     

    1. 잠금화면은 퀴즈를 통해서 잠금 해제할 수 있다.

     

    2. 퀴즈는 랜덤한 UI로 2~3개를 우선적으로 구현할 것이다.

     

    3. 퀴즈를 풀지 않아도 넘어갈 수 있는 즉시 잠금해제 버튼을 넣고, 그 버튼은 총 5번 누를 수 있게 한다.

     

    4. 제한 한도가 끝나면 그 버튼을 비활성화하고, 0시 정각에 그 횟수를 초기화한다.

     

    -----------------------------------------------------------------------------------------------------------------------------------

     

    2021-12-07

     

    잠금화면을 개발하는 기초 상식은 

     

    [Android] 잠금화면 액티비티 설정 (tistory.com)

     

    [Android] 잠금화면 액티비티 설정

    Android에는 잠금화면 액티비티를 개발자가 개발 할 수있다. 그런데 스택오버플로우나 여러 블로그에는 똑같은 글만 돌고 도는듯 하고, 기타 오류에 대해서는 해결법을 찾기 어려웠다. 잠금화면

    whale-order.tistory.com

    이 곳과

     

    android Oreo 이상 앱 종료시점 (tistory.com)

     

    android Oreo 이상 앱 종료시점

    Android Oreo 이상 앱 종료시점 캐치하기 해당 블로그는 다음과 같은 분들에게 도움이 될꺼라 판단합니다. 앱 종료시점(슬라이드 종료) 를 캐치하는데 Oreo 이상은 startForegroundService를 실행하는건 알

    choi3950.tistory.com

    이곳을 참고하여 작성하고 있다.

     

    가장 고민중인 것은 UI 설정, 제한 한도 관리 이 2가지이다.

     

    Service에서는 단순히 잠금화면이 켜지는 서비스만을 제공하기 때문에 이런 한도나 UI 설정에서 이를 건드릴 수는 없고,

    그렇다면 Activity에서 이를 관리해줘야하는데, 가장 고민인건 UI에 관한 설정이다.

     

    SCREEN_ON -> Fragment 선택 -> DB로부터 단어 랜덤 추출 -> 세팅

    거기다 퀴즈이기 때문에 답을 선택하는 과정까지 선보여야하는데 과연 이게

    화면을 지속적으로 키고 끄는 상황에서 제대로 동작을 할 수 있을지부터가 의문이 든다.

     

    2021-12-16

     

    잠금화면이 동작하지 않는 것을 해결하였다.

     

    기존에는 onStartCommand에서 register를 동작하는 방식을 취했는데, 이를 onCreate로 전부 옮겨서

    notification에 대해서 등록 후 바로 알림을 멈춰주는 방식을 통해 불필요한 알림을 제외시켰고,

    그 뒤 register를 등록하고, Activity에서는 일단 finish()를 통해 Activity를 종료하는 버튼을 하나 만들어서 여러 테스트를 해봤다.

     

    일단 확실히 '다른 앱 위에 표시' 권한이 허용된 상태에서 잠금화면은 패턴 혹은 지문을 등록하기 전에 Activity를 올려

    내가 의도한 방향대로 구현이 잘 된 것 같았다. 허나, 패턴을 이용해서 풀려고 하는 경우 Activity에서 동작을 실행하기 전에 패턴을 입력하라는 화면이 나오는 것을 해결해야할 것 같다.

     

    만약 사용자의 기기에서 자체적인 잠금 방식이 있게 되면, 이를 후순위로 밀고, 이 Activity가 종료되어야만 원래 잠금을 해제할 수 있는 방향으로 가려고 하지만, 이렇게 되면 이중 잠금을 푸는 것이기 때문에 사용자 입장에서는 번거로울 수 있다. 더 간단한 방법은 모든 잠금방식을 무시하고, 내 잠금화면에서 Activity가 성공적으로 종료되면 잠금이 전체 풀리는 것인데, 이것은 아마 구현이 안될 것으로 생각된다. 일단 전자의 방향성에서 시간이 지나면 패턴을 해제하라는 화면을 없애보는 것이 1순위일 듯 하다.

     

    2021-12-19

     

    사용을 해보던 도중 여러 문제가 있었고, 그 문제를 해결한 방법에 대해서 나열해보고자 한다.

    또한, 해결되지 않은 것이 하나 있는데, 이것 또한 다뤄보려고 한다.

     

    일단 onCreate, onStartCommand에 대해서는 무지한 부분이었다.

    stopForeground는 notification을 정지하는게 아니라, Foreground Service가 stop하는 코드였고, 그 인자로써

    상태 표시줄 역시 없앨 것인지 판단하는 것이었다. 그래서, 이 코드를 없애고 나니 그 뒤로 코드가 꺼지는 일은 없었다.

    그래서 실제 Activity에서 실행이 될 때 register를 ACTION_SCREEN_OFF flag를 지닌 receiver를 등록하고, onCreate에서는 최초 알림을 만들어내는 역할을 부여했다. 그런데, 사실 내 서비스는 상태 표시줄에 뜨지 않게끔 설정을 해뒀는데,

    최초 실행 시 알림이 뜨면서 실행 중이라는 상태를 계속 표시했고, 이를 좀 더 알아봐서 아예 뜨지 않는 방향으로 고쳐보고자 한다. 일단 임시방편으로 현재 테스트중인 기기에서는 알림을 자체적으로 꺼버렸다.

     

    또한 보통, 잠금화면을 제작할 때, setTurnScreenOn 함수와 requestDismissKeyguard, setShowWhenLocked 세 함수를 같이 사용하는 것으로 공부했었는데, 참고 블로그에서는 setTurnScreenOn 함수를 사용하지 않아서 의아해했었는데, 직접 사용해보니 화면을 자동으로 키는 상황이 발생해서, 이에 대해서 왜 이렇게 되는 것인지에 대한 공부를 하고 있다.

    아마 이를 사용하지 않는 건 BroadCastReceiver에서 Action_screen_off 상태일 때 이미 activity를 실행하고 있고, 이 방법이 아마 setTurnScreenOn의 대체 방식이 아닐까하는 생각이 든다. 자세한 동작방식을 보면서 깨우쳐야 할 것 같다.

     

    또, 잠금화면을 FullScreen으로 만드는 과정에서 R부터는 WindowInsetsController를 활용해 FullScreen과 navigation bar를 없애면 된다. 여기서 특정 동작을 할 때 navigation bar가 올라오는 (하단에서 위로 swipe하는 것과 같은...) 상황에 대해서 이를 차단하는 방법을 우선적으로 알아보려고 한다.

    '프로젝트 > 영어단어 잠금화면' 카테고리의 다른 글

    Android Package  (0) 2022.12.09
    Dialog 오류에 대한 해결  (1) 2021.12.02
    Room Column 전체 삭제에 대한 고찰  (0) 2021.12.02

    댓글

android, kerriganlove, successful