안드로이드 비밀번호 설정 기능 만들기?

조회수 1588회

앱을 만들다 보면 비밀번호를 설정해야 될때가 있잖아요

그래서 비밀번호 입력 창까지 그냥 다 만들었는데요

문제는 액티비티 넘어갈때마다 비밀번호 창이 뜬다는 문제가 있네요 (홈화면으로 나갔다 왔을때도 비밀번호를 설정 해야 되서 onResume에서 비밀번호 체크를 해야 만 될듯합니다)

그래서 플래그를 하나 두고(여기서는 isPasswd 라고 할께요)

예를 들어 액티비티 A,B가 있다고 했을때 지금은

A의 onStop에서 isPasswd = true로 그리고 B의 액티비티의 OnCreate에서 isPasswd =false로

그리고 B의 onResume에서 비밀번호에 대한 체크를 하고 있습니다

그러니깐 액태비티의 A에서 B로 이동하면

B의 onCreate -> onResume -> A의 onStop 순으로 호출되서 원하는 동작을 하긴하지만

예외적인 상황에서 onResume가 발생할 경우 전부 체크를 해줘야 되네요

말이 좀 어려운데 이런식으로 비밀번호 설정 기능을 구현하는건 아닌거 같아서

문의 드립니다 항상감사합니다^

  • (•́ ✖ •̀)
    알 수 없는 사용자

3 답변

  • 코드와 함께 설명드리려고 댓글이 아닌 답변 남깁니다.

    질문자분이 구현하려는 로직은 아래와 같은 방법으로 구현하면 됩니다.

    CustomActivity Class를 만들고 작성하는 Activity는 CustomActivity를 상속받도록 합니다.

    그리고 onResume() 에서 최초 액티비티 생성시 password 입력 화면을 건너 뛰도록 합니다.

    onStop()onResume()의 동작은 반복되니 해당 메소드만 부모 Activity에서 Override 해줍니다.

    우선 아래와 같이 원하는 작업을 하는 부모 Activity Class를 생성합니다.

    public class MySecurityActivity extends AppCompatActivity {
        boolean isFirstShow = true;
        @Override
        protected void onResume() {
            super.onResume();
            if(isFirstShow) {
                showPasswordView();
            }
            isFirstShow = false;
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            // doIt your code
        }
    }
    

    그리고 생성하는 Activity가 AppCompatActivity가 아닌 MySecurityActivity를 상속하도록 합니다.

    public class DataListActivity extends MySecurityActivity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // doIt your code
        }
    }
    

    이러한 구현은 반복되는 코드 작성을 줄여줄 것입니다. 도움이 되었으면 좋겠네요.

    • 이야 신기하네요 한번 해보겠습니다. 예제 까지 알려주시고 정말 정말 감사합니다 최고십니다^^ 알 수 없는 사용자 2018.8.28 15:12
    • 더 궁금하신 점 있으시면 댓글 달아주세요. 도움 드리겠습니다. 김중원 2018.8.29 18:59
    • 네 정말 정말 감사합니다^^ 알 수 없는 사용자 2018.8.30 21:41
  • 말씀하신 대로라면 Activity 가 많을 경우, 생길수 있는 모든 예외 케이스에 대한 처리를 다 해야 합니다. 물론 처리해야 할 케이스가 많지 않을수도 있겠지만요. 게다가 boolean 으로 체크 하기엔 뭔가 꺼림직한 부분이 있죠. 관련 예외가 처리 된 부모 Activity를 두고 해당 Activity 를 extends 하여 사용 할 수도 있겠습니다만..

    이런경우 Service 를 구현하여 running task 를 가져와서 앱이 최상위 task 에 올라온 것을 체크한뒤 비밀번호 화면을 띄우도록 처리 하는 방법이 있습니다. 그러나 getRunningTask() 는 현재 deperecated 된것으로 알 고 있습니다. 대체 API 로 getRunningAppProcesses() 가 있습니다. Activity 까지 명까진 알 수 없어도 package name 을 통해 체크가 가능 할 것 같네요.

    참고 링크

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다 좀 많이 어렵네요 좀 더 공부해봐야겠습니다^^ 알 수 없는 사용자 2018.8.27 22:30
  • 질문글을 몇번 읽어봤는데 무슨말인지 이해가 안되네요.. 보통 패스워드는 최초에 한번 입력받고 그 이후로는 작업에 대한 권한을 줍니다. 만드시는 앱에서는 액티비티마다 다른 패스워드를 가지고 있는건가요?

    일반적인 흐름이라면 아래와 같이 데이터 클레스를 만들고

    public class UserInfo {
        public static boolean isUnlockPassword;
    }
    

    패스워드 입력 시 결과에 따라 static 변수를 값을 수정하고

    if(strPassword.compareTo(strUserInput))
        UserInfo.isUnlockPassword = true;
    else
        UserInfo.isUnlockPassword = false;
    
    

    해당 변수를 사용자가 패스워드를 푸는데 성공했는지 파악하는 flag로 활용하는 방법이 있습니다.

    if(UserInfo.isUnlockPassword) {
         doIt();
    } else {
         showPasswordView();
    }
    
    • 답변 너무 감사합니다 액티비티마다 다른 패스워드는 아니고요 처음에 비밀번호를 입력하고 앱을 실행후 홈 버튼으로 나갔다가 들어올 경우 onCreate가 아닌 onResume이 실행되고 다시 실행됐으니 다시 비밀번호를 물어야 되잖아요 알 수 없는 사용자 2018.8.27 23:19
    • 그리고 액티비티가 여러개 일경우 onResume에서 비밀번호를 체크하면 액티비티를 이동할때마다 비밀번호를 물어보게 되는 경우에 대해서 말한겁니다 알려 주신 방법도 한번 공부 해보겠습니다 정말감사합니다^^ 알 수 없는 사용자 2018.8.27 23:20

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

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

(ಠ_ಠ)
(ಠ‿ಠ)