android home key disable? block 질문입니다.

조회수 2956회

한 액티비티가 실행이 되면 homekey event를 막고 싶습니다.

우선 홈키 이벤트를 감지하는 방법으로는 onUserLeaveHint 메서드를 이용하는 방법과 브로드캐스트로 감지하는 방법을 찾았습니다.

우선 onUserLeaveHint 메서드에서 해당 액티비티를 종료하고 다시 해당액티비티를 새로 호출하는 방법으로 구현하였더니 5초후에 다시 그 액티비티가 켜집니다. 이유를 찾아보니 안드로이드 5초룰?이라고 하는데. 5초 사이에 다른 애플리케이션을 켰더니 onUserLeaveHint메서드의 동작이 구현되지 않았습니다.


    protected void onUserLeaveHint() {

        //여기서 감지
        Log.d("gg", "Home Button Touch");
        finish();

        Intent intent = new Intent(this, ShowActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        super.onUserLeaveHint();
    }


브로드캐스트리시버로 구현한 코드는 http://stackoverflow.com/questions/8881951/detect-home-button-press-in-android 여기서 봤습니다만 막을 수 있는 방법은 없더라고요.

잠금앱들은 이 기능을 구현하고 있으니 방법이 있긴할텐데 안나오네요 ㅠㅠ

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

1 답변

  • (기억이 좀 오래되긴 했지만) 홈키를 막을 수 있는 API는 존재하지 않습니다. 말씀하신 5초 지연 현상도 회피할 수 없습니다. 대개의 잠금 앱은 다음 두가지 방법을 사용합니다.

    • 잠금 앱이 런처가 되는 방법 - 많이 알려진 노바런처, 고런처와 처럼 잠금 앱이 런처가 되는 것입니다. 이렇게 처리를 하면 홈 키 클릭 시, 런처로 빠져나가는 것이 아니라 해당 잠금 앱이 마치 홈 키를 막은 것처럼 보이도록 처리할 수 있습니다. 도돌락커가 이런식으로 구현이 되어 있는데(현재는 구현이 바뀌었는지 확인해보지는 않았어요) 해당 앱을 설치하신 후 참고해보세요.
    • 서비스를 이용해서 시스템 윈도우에 잠금화면 뷰를 그리는 방법 - 홈키를 눌러 홈 화면으로 빠져나가더라도 액티비티보다 높은 z-index를 가진 레이어에 뷰를 그림으로써 잠금화면을 계속 노출 시킬 수 있습니다. 트위터가 인수한 잠금화면 앱이 이런식으로 구현이었는데 현재는 마켓에 존재하지 않네요. 아마 이 방법은 고려해야 할 상황들이(특히 OS가 업데이트 되면서 기능의 제약이 많아짐) 많기 때문에 최근에는 사용하지 않는 것 같습니다.

    덧붙여 유명한 잠금화면 앱들을 설치한 후 하나씩 실행하면서 adb의 액티비티 덤프로 해당 앱의 구현 방식을 살펴보세요. 이 부분도 학습이 필요하겠지만 익숙해지면 대략 어떻게 구현을 했는지에 대한 힌트를 얻을 수 있습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • adb 사용법은 아는데 다른 앱을 켜고 봐야겠다는 생각은 아예 하지도 못하고 있었네요. 힌트 감사합니다. 알 수 없는 사용자 2017.3.24 19:17

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

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

(ಠ_ಠ)
(ಠ‿ಠ)